PHP递归问题

PHP递归问题,php,arrays,recursion,array-walk,Php,Arrays,Recursion,Array Walk,您好,我正在尝试在以下数组中查找最长的字符串: $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(

您好,我正在尝试在以下数组中查找最长的字符串:

$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);
函数getLongest($array){ $longest=“”; $len=0; 功能(项目){ 全球$len; 全球美元最长; 如果(是字符串($item)){ 回声$len.“
”; 如果(strlen($item)>$len){ $longest=$item; $len=strlen($item); } } } array_walk_recursive($array,'arrWalk'); echo$len; } arrWalk($尼扎);
答案就在这里

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;


}

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

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

您可以简单地使用下面的代码,这将有助于获得预期的结果

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

您应该使用全局变量在递归状态下存储变量中的最新值

我认为
array\u reduce()
更合适我认为
getLongest($arr)
永远不会被调用。我使用我定义的数组调用getLongest():D