strpos nie znajduje pozycji

0

Witam, mam taki kod:

$iteration = 0;
    foreach($news_table as $new)
    {      
        if(strstr($new, "a") !== false){
            unset($news_table[$iteration]);
        }
    }

I zamiast usuwać wszystkie indexy tablicy, gdzie jest "a" to usuwa tylko jeden.

2

A gdzie masz coś co ma zmienić wartości zmiennej $iteration ?

1
foreach($news_table as $key => $new)
{      
    if(strpos($new, "a") !== false){
        unset($news_table[$key]);
    }
}
0
jurek1980 napisał(a):

A gdzie masz coś co ma zmienić wartości zmiennej $iteration ?

Właśnie to zauważyłem i już z 20 wyników pokazuje mi 10, ale kiedy mam taki kod:

$wordsA = ["Kaczyńsk", "Europejsk", "sejm", "poselski","poseł", "posła", "minist", "Koalicj",
    "Obywatelsk", "Dud", "prezyden"];
    $wordsB = ["Szydł", "trybunał", "PiS","Morawieck", "PSL", "KRS", "Ziobro", "Sądownictwa"];


    //Przejdź po każdym newsie
    $iteration = 0;
    foreach($news_table as $new)
    {
        $wordsA_count = 0;
        $wordsB_count = 0;
        for($i=0; $i<count($wordsA); $i++){
            if(strstr($new, $wordsA[$i]) !== false){
                $wordsA_count++;
            }
        }
        for($i=0; $i<count($wordsB); $i++){
            if(strstr($new, $wordsB[$i]) !== false){
                $wordsB_count++;
                echo $wordsB[$i]."_".$iteration." | ";
            }
        }
        if($wordsA_count > 1 || $wordsB_count > 0){
            unset($news_table[$iteration]);
        }
        $iteration++;
    }

To pokazuje mi:

Ziobro_3 | KRS_5 | Sądownictwa_5 | KRS_6 | Sądownictwa_6 | PiS_7 | trybunał_8 | KRS_9 | Sądownictwa_9 | Sądownictwa_10 | PiS_11 | Sądownictwa_11 | KRS_16 | Sądownictwa_16 |

Mimo, że nigdzie w tekście nie ma Ziobro, ani KRS

1

Pokaż testowo problematyczne dane wejściowe. P.S. troszkę kontrowersyjne:)
I dokładnie opisz co chcesz uzyskać. Lepiej używaj sobie usuwania elementu przez aktualny klucz jak wskazał @.__.. Jak będziesz operował na tablicy już z usuniętymi jakimiś elementami (klucze nie będą po kolei) to potem zaczniesz szukać dziury w całym.

0
jurek1980 napisał(a):

Pokaż testowo problematyczne dane wejściowe. P.S. troszkę kontrowersyjne:)
I dokładnie opisz co chcesz uzyskać. Lepiej używaj sobie usuwania elementu przez aktualny klucz jak wskazał @.__.. Jak będziesz operował na tablicy już z usuniętymi jakimiś elementami (klucze nie będą po kolei) to potem zaczniesz szukać dziury w całym.

Dane wejściowe to <description> ze strony TVN24. Kontrowersyjne, bo chcę, aby odfiltrowało wiadomości polityczne od innych. Chcę uzyskać efekt, który z tablicy news_table usuwa te indexy, w których znajdują się albo 2 wyrazy kategorii A, albo 1 kategorii B.

3

Chodzi Ci o coś takiego?

<?php
$news = [
    'kaczyński Naszym Wodzem', // Nie powinno byc usuniete
    'sejm Kaczyńskiego ', // powinno byc usuniete;
    'sejm PSL', // powinno byc usuniete; 
    'nic podejrzanego'// Nie powinno byc usuniete

];
$category1 = ["Kaczyńsk", "Europejsk", "sejm", "poselski","poseł", "posła", "minist", "Koalicj",
"Obywatelsk", "Dud", "prezyden"];
$category2 = ["Szydł", "trybunał", "PiS","Morawieck", "PSL", "KRS", "Ziobro", "Sądownictwa"];

foreach($news as $key => $string){
    $matchesCat1 = countMatch($category1,$string);
    $matchesCat2 = countMatch($category2,$string);
    echo 'W: '.$string.' występują cat1: '.$matchesCat1.' cat2: '.$matchesCat2. PHP_EOL;
    if($matchesCat1>=2 OR $matchesCat2>=1){
        unset($news[$key]);
    }
}
print_r($news);

function countMatch(array $needles, $string){
    $y='/';
    $y .= implode('|', $needles);
    $y .='/';
    $result = preg_match_all($y,$string);
    return $result;
}
0

Tak, właśnie o to mi chodziło, dziękuję!

1 użytkowników online, w tym zalogowanych: 0, gości: 1