循环遍历php多维数组的每个键和值


Loop through each key and value of php multidimensional array

我有以下数组:

<pre>Array
(
    [student] => Array
        (
            [admission_no] => Array
                (
                    [isEmpty] => Please enter Admission No
                )
            [admission_date] => Array
                (
                    [isEmpty] => Please enter Admission Date
                )
        )
    [student_personal_details] => Array
        (
            [first_name] => Array
                (
                    [isEmpty] => Please enter First Name
                )
            [gender] => Array
                (
                    [isEmpty] => Please select Gender
                )
            [birth_date] => Array
                (
                    [isEmpty] => Please enter Birth Date
                )
        )
    [student_gardian_details] => Array
        (
            [first_name] => Array
                (
                    [isEmpty] => Please enter Gardian First Name
                )
        )
    [student_education_details] => Array
        (
            [roll_no] => Array
                (
                    [isEmpty] => Please enter Pin Code
                )
        )
)

我想用while循环获取这个数组中的所有字符串。我的意思是整个数组的键本身不是数组

我尝试了以下代码:

private function getInternalErorrString($array) {
        while (list($var, $val) = each($array)) {
            if(is_array($var)) {
                $this->getInternalErorrString($var);
            } else {
                return $val;
            }
        }
    }
我有更好的主意吗?

或者,您可以使用SPL RecursiveArrayIterator来获取这些值。考虑这个例子:

$values = array( 'student' => array( 'admission_no' => array('isEmpty' => 'Please enter Admission No'), 'admission_date' => array('isEmpty' => 'Please enter Admission Date'), ), 'student_personal_details' => array( 'first_name' => array('isEmpty' => 'Please enter First Name'), 'gender' => array('isEmpty' => 'Please enter Gender'), 'birth_date' => array('isEmpty' => 'Please enter Birth Date'), ), 'student_gardian_details' => array( 'first_name' => array('isEmpty' => 'Please enter Gardian First Name'), ), 'student_education_details' => array( 'roll_no' => array('isEmpty' => 'Please enter Pin Code'), ),);
$iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($values));
foreach($iterator as $key => $value) {
    $data[] = $value;
}
样本输出:

Array
(
    [0] => Please enter Admission No
    [1] => Please enter Admission Date
    [2] => Please enter First Name
    [3] => Please enter Gender
    [4] => Please enter Birth Date
    [5] => Please enter Gardian First Name
    [6] => Please enter Pin Code
)

您可以查看php函数array_values和文档页中的示例。

参见如何在PHP中将多维数组"扁平化"为简单数组?

我没有检查你的代码,但改变你下面的代码将导致你所期望的。如果您只想获得消息数组,那么使用public var来存储值,而不是回显它。

 private function getInternalErorrString($array) {
      foreach($array as $val) 
      {
         if(is_array($val)) {
            $this->getInternalErorrString($val);
         } 
         else {
            echo $val ."<br/>";
         }
      }
   }
   $this->getInternalErorrString($array);

简单的函数就可以实现这个

function finalKeys($array)
{
    global $return;
    foreach($array as $key) {
        if (is_array($key)) {
            finalKeys($key);
        }
        else {
            $return[] = $key;
        }
    }
    return $return;
}

用法: finalKeys($multidimensional_array);