2016-11-05 170 views
1

您好我想找到下面的数组中的最长的字符串:PHP递归问题

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

我使用下面的函数,但我没有得到期望的结果,的$len值保持不变。你可以帮我吗?

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

我想' array_reduce()'会更合适 – phaberest

+0

我认为'getLongest($ arr)'永远不会被调用。 – MH2K9

回答

2

要从数组中获得最长的字符串元素,您可以在递归函数下面使用。

$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

下面是答案!

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

我用我定义的数组调用getLongest():D –

0

你可以简单地去下面的代码,这将有助于让你的预期的结果

<?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; 
?> 

你应该采取全局变量在递归状态存储在变量lateste值