У меня есть следующий массив:
<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 function 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);