【问题标题】:Loop through each key and value of php multidimensional array循环遍历php多维数组的每个键和值
【发布时间】:2014-06-02 22:17:20
【问题描述】:

我有以下数组:

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

我能有更好的主意吗?

【问题讨论】:

  • 最后的输出是什么?你想得到isEmpty上的所有项目吗?

标签: php arrays multidimensional-array


【解决方案1】:

或者,您可以使用 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
)

【讨论】:

    【解决方案2】:

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

    另见How to “flatten” a multi-dimensional array to simple one in PHP?

    【讨论】:

      【解决方案3】:

      我没有检查您的代码,但更改为您的以下代码将产生您所期望的结果。如果您只想获取一组消息,则使用 public var 来存储值而不是回显它。

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

      【讨论】:

        【解决方案4】:

        简单的功能就可以做到这一点

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

        用法: finalKeys($multidimensional_array);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-01
          • 2012-04-21
          • 2011-01-02
          • 2016-02-16
          • 2021-09-17
          • 1970-01-01
          相关资源
          最近更新 更多