【问题标题】:PHP recursive multidimensional loopPHP递归多维循环
【发布时间】:2018-12-28 17:20:34
【问题描述】:
$printArr = recursive($newArray); //calls recursive function
$data = [];
var_dump($data);
var_dump($printArr);
    function recursive($array, $level = 0)
    {
        $searchingValue = 'tableName';
        foreach($array as $key => $value)
        {
                //If $value is an array.
                if(is_array($value))
                {
                    recursive($value, $level + 1);
                } 
                else
                {
                    //It is not an array, so print it out.
                    if($key == $searchingValue)
                    {
                        echo "[".$key . "] => " . $value, '<br>';
                        $data[] = $value;
                    }
                }
        }
    }

所以我有这个函数,我试图将 $value 值保存到 $data[] 数组中。但它总是将它返回为空,我不知道为什么我不能在函数之外保存 $value。 如果我 echo $value 我得到了我需要的东西,但就像我提到的那样,在这种情况下变量不会被保存 - 表名。

【问题讨论】:

  • 你有没有在任何地方调用过recursive()函数?或者只是声明并打印了 $data 数组,该数组已经为空。
  • $level 的作用是什么?
  • 你能解释一下你写的函数的目标吗?
  • 或者甚至显示一些示例输入以及实际输出和预期输出
  • 是的,我做到了。 $printArr = 递归($newArray); //调用递归函数 $data = []; var_dump($data); var_dump($printArr);我也在问题代码中添加了。

标签: php arrays loops recursion multidimensional-array


【解决方案1】:

您不能从函数访问函数外部的变量 $data。您需要通过引用传递它或返回它。小例子

<?php

$a = 1;

// Your case
function b() {
    $a = 4;
    return true;
}
// Passing by reference
function c(&$d) {
    $d = 5;
    return true;
}
// Using return
function d($d) {
    $d = 6;
    return $d;
}

b();
var_dump($a);

c($a);
var_dump($a);

$a = d($a);
var_dump($a);

https://3v4l.org/UXFdR

【讨论】:

    【解决方案2】:

    您需要将 $data 传递给您的递归函数。您还需要返回 $data。

    试试这个代码:

    function recursive($array, $level = 0, $data =[])
    {
        $searchingValue = 'tableName';
        foreach($array as $key => $value)
        {
                //If $value is an array.
                if(is_array($value))
                {
                    recursive($value, $level + 1 , $data);
                } 
                else
                {
                    //It is not an array, so print it out.
                    if($key == $searchingValue)
                    {
                        echo "[".$key . "] => " . $value, '<br>';
                        $data[] = $value;
                    }
                }
        }
        return $data;
    }
    

    【讨论】:

    • 如果通过引用传递,不需要返回数据,选择一个。此外,您没有在示例中通过引用传递数据。
    • 成功了!我不敢相信我没想过要通过参考。非常感谢!
    猜你喜欢
    • 2011-08-30
    • 2021-01-18
    • 2019-06-14
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    相关资源
    最近更新 更多