简体   繁体   English

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

[英]Loop through each key and value of php multidimensional array

I have the following 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
                )

        )

)

I want to get all the strings in this array using while loop. 我想使用while循环获取此数组中的所有字符串。 I mean keys of the whole array that are not an array itself. 我的意思是整个数组的键不是数组本身。

I tried the following code: 我尝试了以下代码:

private function getInternalErorrString($array) {
        while (list($var, $val) = each($array)) {
            if(is_array($var)) {
                $this->getInternalErorrString($var);
            } else {
                return $val;
            }
        }
    }

Can I have any better idea? 有什么更好的主意吗?

Alternatively, you could use SPL RecursiveArrayIterator to get the values. 或者,您可以使用SPL RecursiveArrayIterator来获取值。 Consider this example: 考虑以下示例:

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

Sample Output: 样本输出:

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
)

You can check the php function array_values and the examples in the documentation page. 您可以在文档页面中查看php函数array_values和示例。

See also How to “flatten” a multi-dimensional array to simple one in PHP? 另请参见如何在PHP中将多维数组“展平”为简单数组?

simple function can achive this 简单的功能可以达到这个目的

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

    return $return;
}

Usage: finalKeys($multidimensional_array); 用法: finalKeys($multidimensional_array);

I didn't checked your code but change to your below code will result what you expected. 我没有检查您的代码,但更改为以下代码将得到您所期望的结果。 If you want to get an array of messages only then use public var to store the value in place of echoing it. 如果只想获取消息数组,则可以使用public var来存储该值,而不是回显该值。

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

   $this->getInternalErorrString($array);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM