"Unter-Arrays" mit in_array auslesen - geht das?


loddarmattheus

Erfahrenes Mitglied
Hallo Jungs,
angenommen , ich habe verschiedene Arrays wie folgt:

array(2) {
[0]=> array(2) {
["type"]=> string(7) "hashtag"
["text"]=> string(4) "#VIB" }
[1]=> string(49) " Buy zone 550-590 Sell zone 630-690-780-950-1200+"
}
array(2) {
[0]=> array(2) {
["type"]=> string(7) "hashtag"
["text"]=> string(4) "#SNM" }
[1]=> string(49) " Buy zone 240-255 Sell zone 275-295-330-410-550+"
}
.............
Nun versuche ich, in den einzelnen Arrays markante Textstellen - hier den Hashtag zu finden mittels:

PHP:
$begriff = "#";
  if(in_array($begriff, $array)) {
        echo "JA ist vorhanden<br />";           
        }
        else echo "Nö ist es nicht<br />";
    }
Die Ausgabe schreibt mir immer "Nö ...." obwohl ja zweimal ein # vorkommt?
 

Yaslaw

n/a
Moderator
Als erstes mal die Arrays in eine lesbare Form bringen
Code:
array(2) { 
    [0]=>  array(2) {   
        ["type"]=>    string(7) "hashtag"   
        ["text"]=>    string(4) "#VIB"  
    } 
    [1]=>  string(49) " Buy zone 550-590 Sell zone 630-690-780-950-1200+"
}

array(2) { 
    [0]=>  array(2) {   
        ["type"]=>    string(7) "hashtag"   
        ["text"]=>    string(4) "#SNM"  
    } 
    [1]=>  string(49) " Buy zone 240-255 Sell zone 275-295-330-410-550+"
}
Du suchst nach dem #. Aber der # kommt nicht alleine. Ergo findet er ihn nicht, da ein Vergleich in_array() ein == Vergleich macht.

Man kann aber relativ einfach eine eigene Funktion schreiben
PHP:
$arr1[]= array("type"=> "hashtag", "text"=> "#VIB");
$arr1[]= " Buy zone 550-590 Sell zone 630-690-780-950-1200+";

$arr2[]= array("type"=> "hashtag", "text"=> "XXXX");
$arr2[]= " Buy zone 550-590 Sell zone 630-690-780-950-1200+";


//print_r($arr);
echo 'test 1: '. (myFindFuncRecursive($arr1, '#') ? 'true' : 'false');
echo '<br />test 2: '.(myFindFuncRecursive($arr2, '#') ? 'true' : 'false');

function myFindFuncRecursive(array $arr, string $find) :bool{
    foreach($arr as $item){
        if(is_array($item)){
            if(myFindFuncRecursive($item, $find)) return true;
        }else{
            if(strpos($item, $find) !== false) return true;    
        }
    }
    return false;
}
Code:
test 1: true
test 2: false
 

loddarmattheus

Erfahrenes Mitglied
Irgendwie schmeisst er mir nur Fehler. So sieht meine test.php aus

PHP:
<?php

include 'function.php';

$arr1[]= array("type"=> "hashtag", "text"=> "#VIB");
$arr1[]= " Buy zone 550-590 Sell zone 630-690-780-950-1200+";

$arr2[]= array("type"=> "hashtag", "text"=> "XXXX");
$arr2[]= " Buy zone 550-590 Sell zone 630-690-780-950-1200+";


//print_r($arr);
echo 'test 1: '. (myFindFuncRecursive($arr1, '#') ? 'true' : 'false');
echo '<br />test 2: '.(myFindFuncRecursive($arr2, '#') ? 'true' : 'false');

?>
Und so meine function.php

PHP:
<?php

function myFindFuncRecursive(array $arr, string $find) :bool{
    foreach($arr as $item){
        if(is_array($item)){
            if(myFindFuncRecursive($item, $find)) return true;
        }else{
            if(strpos($item, $find) !== false) return true;   
        }
    }
    return false;
}

?>
Ergebnis: Parse error: syntax error, unexpected ':', expecting '{' in D:\xampp\htdocs\test\json\function.php on line 3
 

Yaslaw

n/a
Moderator
Jepp, in dem Fall nimm die Typendeklaration weg. Ist zwar schlecht und du solltest dein PHP auf den neusten Stand bringen, aber das ist eine andere Geschichte.
PHP:
function myFindFuncRecursive($arr, $find){