【问题标题】:PHP recursive issuePHP递归问题
【发布时间】:2016-11-05 11:07:49
【问题描述】:

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

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

【问题讨论】:

  • 我想array_reduce() 会更合适
  • 我认为getLongest($arr) 永远不会被调用。

标签: php arrays recursion array-walk


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这就是答案!

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

    【讨论】:

    • 我用我定义的数组调用 getLongest() :D
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-21
      • 1970-01-01
      • 2017-10-18
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      相关资源
      最近更新 更多