2016-11-05 1 views
1

Hallo Ich versuche, die längste Zeichenfolge in folgenden Reihe zu finden:PHP rekursive Ausgabe

$niza = array(array(5, 1.15 , 15), 
array('unknown', 0.75 , 5, array(2, 'bla', 1.15)), 
array(array('text'), 1.15 , 7) 

ich die folgende Funktion verwenden, aber ich nicht das gewünschte Ergebnis erhalten, bleibt der Wert von $len unverändert. Kannst du mir helfen?

function getLongest($array){ 
$longest=""; 
$len=0; 

function arrWalk($item){ 
    global $len; 
    global $longest; 
    if(is_string($item)) { 
     echo $len . "<br>"; 
     if (strlen($item) > $len) { 
      $longest = $item; 
      $len = strlen($item); 
     } 
    } 
} 

array_walk_recursive($array,'arrWalk'); 

echo $len; 

} 

arrWalk($niza); 
+0

I 'nehmen array_reduce() 'wäre besser geeignet – phaberest

+0

Ich denke' getLongest ($ arr) 'wird nie aufgerufen. – MH2K9

Antwort

2

Um längste String-Element aus Array zu erhalten, können Sie unterhalb der rekursiven Funktion verwenden.

$niza = array(
    array(5, 1.15 , 15), 
    array(
     'unknown', 0.75 , 5, 
     array(2, 'bla', 1.15) 
    ), 
    array(array('text'), 1.15 , 7) 
); 

$longestString = ''; 
function getLongestString($param) 
{ 
    global $longestString; 

    if (is_array($param)) 
    { 
     foreach ($param as $val) 
     { 
      if (is_string($val) && strlen($val) > strlen($longestString)) 
      { 
       $longestString = $val; 
      } 
      else 
      { 
       getLongestString($val); 
      } 
     } 
    } 
    elseif (is_string($param) && strlen($param) > strlen($longestString)) 
    { 
     $longestString = $param; 
    } 
} 

getLongestString($niza); 

print $longestString; 
0

Hier ist die Antwort!

function array_flatten($array) { 
if (!is_array($array)) { 
    return FALSE; 
} 
$result = array(); 
$i=0; 
foreach ($array as $item) { 
    if (is_array($item)) { 
     $result = array_merge($result, array_flatten($item)); 
    } 
    else if(is_string($item)) { 
     array_push($result,$item); 
    } 
} 
return $result; 
} 


function getLongest($array){ 
$arr_nivo_1 =array_flatten($array); 

$longest=""; 
$maxLen=0; 
foreach ($arr_nivo_1 as $item){ 
    if(strlen($item)>$maxLen){ 
     $maxLen=strlen($item); 
     $longest=$item; 
    } 
} 
return $longest; 


} 
+0

Und ich rufe getLongest() mit dem Array, das ich definiert habe: D –

0

Sie einfach mit Code unten gehen können, die Ihr erwartetes Ergebnis werden dazu beitragen,

<?php 


$niza = array(array(5, 1.15 , 15), array('unknown', 0.75 , 5, array(2, 'bla', 1.15)), array(array('text'), 1.15 , 7)); 

$crew = '0'; // assign by default one value that count will be default 1 

function getLongest($item, $key) 
{ 
    global $crew; 
    if(strlen($item) >= strlen((string)$crew)){ 
    $crew = $item; 
    } 
} 

array_walk_recursive($niza, 'getLongest'); 

echo $crew; 
?> 
zu bekommen

Sie globalen Variable nehmen sollten Lateste Wert in den Variablen bei rekursiven Zustand zu speichern