"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

alter Rempler
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

alter Rempler
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){
 

Neue Beiträge