2013-09-12 2 views
0

Я пытаюсь найти эффективный способ сделать следующее:Синтаксический вложенной Array (PHP)

1) Parse массив. 2) Если элемент является единственным значением, сохраните его/эхо. 3) Если элемент представляет собой массив, проанализируйте его и сохраните/эхо все его элементы.

Примером может быть:

$ = массив Массив (15,25, 'Собака', [11, 'Кошка', 'Cookie15'], 22)

Это будет echo'd как:

Собака Кошка Cookie15

Примечание: максимальное количество вложенных слоев массивы = 2 (макс массив в массиве, не глубже этого).

код я сделал до сих пор:

foreach($_POST as $key=>$value){ 
     if(is_array($value)) 
     { 
     <Not sure how to handle this condition! Need to parse the array and echo individual elements> 
     } 
     else 
     { 
     echo "Input name : $key Value : $value "; 
     } 
} 

Edit: Следующий мой дамп для массива. Вложенные элементы показывают пустую по какой-то нечетной причине!

string '15' (length=2) 

string '25' (length=2) 

string 'Dog' (length=3) 

array (size=3) 
    0 => string '' (length=0) 
    1 => string '' (length=0) 
    2 => string '' (length=0) 

string '22' (length=2) 

Соответствующий код:

foreach($_POST as $input) { 
var_dump($input); 
} 
+0

Откуда этот массив? Что это создало? Если это четко определенный формат, обязательно должен быть существующий код, который сделает это за вас. –

+0

Это массив ответов от викторины! Существует 3 типа ответов: «Один выбор» (кнопка «Радио»), «Множественный выбор» (флажок) и «Открытый ответ» (введенный пользователем ответ). При обработке массива он хорошо работает для типов Single и Open, но для флажка (который содержит массив выбранных ответов, а не только одно значение), я столкнулся с этой проблемой! –

+0

Значит, вы на самом деле ничего не разбираете. Вы хотите знать, как обрабатывать вложенные массивы, которым вы были переданы. –

ответ

2

Это должно сделать трюк

PS .: Я редактировать вызов функции, я звала его внутри Еогеасп, теперь я просто послать $ _POST Wich правильно.

Второе редактирование: я больше не сохраняю функцию внутри переменной, вместо этого я объявляю ее.

function recursiveEcho($input){ 
    if (is_array($input)) { 
     foreach ($input as $key => $value) { 
      if (is_array($value)) { 
       recursiveEcho($value); 
      } else { 
       echo "Input name: {$key} Value: {$value}"; 
      } 
     } 
    } else { 
     // This is a string, there is no key to show 
     echo "Input value: {$input}"; 
    } 
}; 

recursiveEcho($_POST); 
+2

Это не удается, когда '$ input' является строкой! – ComFreek

+0

Я только что протестировал его, @ComFreek прав. Если вы не возражаете, можете ли вы объяснить, почему это не удается? –

+1

@SainathKrishnan Предположим, что первое значение $ _POST - это строка, а '$ recursiveEcho' thethefore передается строка. Это ничего не будет делать, потому что '$ recursiveEcho' проверяет только массивы и ничего не делает. – ComFreek

3

Использование RecursiveIteratorIterator и RecursiveArrayIterator, безусловно, самый чистый способ:

$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr)); 

foreach ($it as $key => $value) { 
    var_dump($key, $value); 
} 


Это было мое старое решение:

function handle($arr, $deepness=1) { 
    if ($deepness == 3) { 
    exit('Not allowed'); 
    } 

    foreach ($arr as $key => $value) { 
    if (is_array($value)) { 
     handle($value, ++$deepness); 
    } 

    else { 
     echo "Input name: $key Value: $value "; 
    } 
    } 
} 

handle($_POST); 
+0

Согласно первому комментарию в doco, рекурсивная функция намного быстрее, чем RecursiveIteratorIterator: http: // php.net/manual/en/class.recursiveiteratoriterator.php –

0

Это будет относиться только к 1 уровню. Чтобы обрабатывать количество уровней, вам нужно либо использовать рекурсивную функцию, либо хранить вложения if.

foreach($_POST as $key => $value) { 
    if(is_array($value) { 
     foreach($value as $key2 => $value2) { 
     echo "Key: " . $key2 . "value: " .$value2; 
     } 
    } else { 
     echo "key" . $key . "value: ". $value; 
    } 

} 
+0

По какой-то причине $ value2 пуст для всех элементов вложенного массива! $ key2 имеет правильные значения, хотя (номера индексов массива) –

Смежные вопросы