Доброго времени суток! Очень прошу показать "на пальцах" ну или как получится, можно просто решением, буду додумывать сам Из некой формы посредством POST приходит некий многомерный массив, print_r выдает такую структуру массива: Код (Text): Array ( [adres] => город [shema] => ДДА [0] => Array ( [nomer_r_doc] => 4.1 [vib_r_doc] => risk_doc [text_r_doc] => 1 [nomer_r_dog] => 5.1 [vib_r_dog] => risk_dog [text_r_dog] => 3 ) [1] => Array ( [nomer_r_doc] => 4.2 [vib_r_doc] => min_doc [text_r_doc] => 2 ) [send] => Отправить ) Пытаюсь перебрать каждое значение ключ -> значение Код (Text): <?php if (!empty($_POST)){ $i = 1; foreach ($_POST as $key => $value) { if (gettype($key) === "integer"){ echo '<strong>№' . $i++ . '</strong></br>' . "\n"; echo 'Вывод ключа nomer_r_doc: ' . $value['nomer_r_doc'] . ' </br>' . "\n"; echo 'Вывод ключа vib_r_doc: ' . $value['vib_r_doc'] . '</br>' . "\n"; echo 'Вывод ключа text_r_doc: ' . $value['text_r_doc'] . '</br>' . "\n"; echo 'Вывод ключа nomer_r_dog: ' . $value['nomer_r_dog'] . '</br>' . "\n"; echo 'Вывод ключа vib_r_dog: ' . $value['vib_r_dog'] . '</br>' . "\n"; echo 'Вывод ключа text_r_dog: ' . $value['text_r_dog'] . '</br>' . "\n"; echo 'Вывод ключа adres: ' . $value['adres'] . '</br>' . "\n"; } } } ?> В итоге получаю следующее №1 Вывод ключа nomer_r_doc: 4.1 Вывод ключа vib_r_doc: risk_doc Вывод ключа text_r_doc: 1 Вывод ключа nomer_r_dog: 5.1 Вывод ключа vib_r_dog: risk_dog Вывод ключа text_r_dog: 3 Warning: Undefined array key "adres" in F:\server\OpenServer\domains\uz\result_uz.php on line 20 Вывод ключа adres: №2 Вывод ключа nomer_r_doc: 4.2 Вывод ключа vib_r_doc: min_doc Вывод ключа text_r_doc: 2 Warning: Undefined array key "nomer_r_dog" in F:\server\OpenServer\domains\uz\result_uz.php on line 17 Вывод ключа nomer_r_dog: Warning: Undefined array key "vib_r_dog" in F:\server\OpenServer\domains\uz\result_uz.php on line 18 Вывод ключа vib_r_dog: Warning: Undefined array key "text_r_dog" in F:\server\OpenServer\domains\uz\result_uz.php on line 19 Вывод ключа text_r_dog: Warning: Undefined array key "adres" in F:\server\OpenServer\domains\uz\result_uz.php on line 20 Вывод ключа adres: Т.е. получается, что первый вложенный массив foreach нормально отрабатывает, а дальше выдает ошибки, Warning: Undefined array key. Понимаю, что вопрос нубский (я им и являюсь) и в гугле меня не за банили, но вот, что то не нахожу, как перебрать все значения в массиве $_POST.
Это, само по себе, должно было натолкнуть на мысль, что так не делают. Нет? Извлекайте только то, что ожидаете. Как вариант, можно посчитать общее количество элементов, и если их не столько, сколько должно прийти, то вообще ничего не трогайте. Например Код (Text): $var = 'default value'; if(isset($_POST['keyname']) && my_function($_POST['keyname']) == 'value') { $var = $_POST['keyname']; }
Доброго времени суток. Я понимаю, что вы хотите сказать, что нужно извлекать только нужные значения, но задача именно извлечь все значения. На другом форуме мне уже подсказали решение и оно работает так как надо: Код (Text): foreach ($_POST as $key => $value) { if(is_array($value)) { foreach ($value as $key_2 => $value_2) { echo $key_2. '=>'.$value_2."<br />"; } } else echo $key. '=>'.$value."<br />"; }
Действительно, согласен с вами, если будет 3 уровня в массиве, уже не сработает. Неужели в php нет возможности отработать массив сколько угодно вложенности друг в друга и при этом если не известно сколько уровней в нем, должно же быть что-то, как то такая задача должна решаться?!
Все просто! Делаем функцию PHP: function ReadField(&$Src,$Name,$Default='') { if ((array_key_exists($Name,$Src))) { return (is_string($Src[$Name])? trim($Src[$Name]) : $Src[$Name]); } foreach($Src as $Element) { if (is_array($Element)) { $Value = ReadField($Element,$Name,$Default); if ($Value!==$Default) return $Value; } } return $Default; } И наслаждаемся: PHP: echo 'Вывод ключа nomer_r_doc: ' . ReadField($_POST,'nomer_r_doc','undefined'). ' </br>' . "\n"; echo 'Вывод ключа vib_r_doc: ' . ReadField($_POST,'vib_r_doc','undefined') . '</br>' . "\n"; echo 'Вывод ключа text_r_doc: ' . ReadField($_POST,'text_r_doc','undefined') . '</br>' . "\n"; echo 'Вывод ключа nomer_r_dog: ' . ReadField($_POST,'nomer_r_dog','undefined') . '</br>' . "\n"; echo 'Вывод ключа vib_r_dog: ' . ReadField($_POST,'vib_r_dog','undefined') . '</br>' . "\n"; echo 'Вывод ключа text_r_dog: ' . ReadField($_POST,'text_r_dog','undefined') . '</br>' . "\n"; echo 'Вывод ключа adres: ' . ReadField($_POST,'adres','undefined') . '</br>' . "\n"; вывод, будет такой, если взять пример указанный в вопросе HTML: Вывод ключа nomer_r_doc: 4.1 Вывод ключа vib_r_doc: risk_doc Вывод ключа text_r_doc: 1 Вывод ключа nomer_r_dog: 5.1 Вывод ключа vib_r_dog: risk_dog Вывод ключа text_r_dog: 3 Вывод ключа adres: город