解析嵌套数组(PHP)

时间:2013-09-12 15:58:28

标签: php arrays

我正在尝试找到一种有效的方法来执行以下操作:

1)解析一个数组。 2)如果元素是单个值,则将其存储/回显。 3)如果元素是一个数组,请解析它并存储/回显它的所有元素。

一个例子是:

$ array = array(15,25,' Dog',[11,' Cat',' Cookie15'],22)

这将是回声&#d; dd:

15 25 狗 11 猫 Cookie15 22

注意:Arrays的嵌套图层的最大数量= 2(最大值是数组中的数组,不比此更深)。

到目前为止,我所做的代码是:

foreach($_POST as $key=>$value){  
      if(is_array($value))
      {
      <Not sure how to handle this condition! Need to parse the array and echo individual elements>
      }
      else
      {
       echo "Input name : $key Value : $value  ";
      }
}

编辑:以下是我对阵列的转储。由于某些奇怪的原因,嵌套元素显示为空白!

string '15' (length=2)

string '25' (length=2)

string 'Dog' (length=3)

array (size=3)
  0 => string '' (length=0)
  1 => string '' (length=0)
  2 => string '' (length=0)

string '22' (length=2)

相关代码是:

foreach($_POST as $input) {
 var_dump($input);
}

3 个答案:

答案 0 :(得分:3)

使用RecursiveIteratorIterator和RecursiveArrayIterator绝对是最干净的方法:

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));

foreach ($it as $key => $value) {
    var_dump($key, $value);
}

<小时/> 这是我以前的解决方案:

function handle($arr, $deepness=1) {
  if ($deepness == 3) {
    exit('Not allowed');
  }

  foreach ($arr as $key => $value) {
    if (is_array($value)) {
      handle($value, ++$deepness);
    }

    else {
      echo "Input name: $key Value: $value ";
    }
  }
}

handle($_POST);

答案 1 :(得分:2)

这应该可以解决问题

PS:我编辑了对该函数的调用,我在foreach中调用它,现在我只是发送$ _POST,这是正确的。

第二次编辑:我不再将函数保存在变量中,而是将其声明。

function recursiveEcho($input){
    if (is_array($input)) {
        foreach ($input as $key => $value) {
            if (is_array($value)) {
                recursiveEcho($value);
            } else {
                echo "Input name: {$key} Value: {$value}";
            }
        }
    } else {
        // This is a string, there is no key to show
        echo "Input value: {$input}";
    }
};

recursiveEcho($_POST);

答案 2 :(得分:0)

这只能处理1级。要处理x个级别,您必须使用递归函数,或继续嵌套if语句。

foreach($_POST as $key => $value) {
   if(is_array($value) {
        foreach($value as $key2 => $value2) {
         echo "Key: " .  $key2 . "value: " .$value2;
        }
    } else {
        echo "key" .  $key . "value: ".  $value;
    }

}
相关问题