2013-05-24 2 views
-1

Я пытаюсь создать многомерный массив из уже существующего массива. Причина, по которой я это делаю, заключается в том, что я могу отделить супер-массив от более категоризированной версии, чтобы позже я мог запускать foreach только для этих категорий в другом скрипте.Php-массив в цикле foreach

Это фрагмент кода // Пожалуйста, прочтите комментарии :)

$and = array(); 

if($this-> input-> post('and')) // This is the super array and[] from a previous input field 
{ 
    if(preg_grep("/reason_/", $this-> input-> post('and'))) // Search for the reason_ 
    { 
     foreach($this-> input-> post('and') as $value) // if reason_ is present 
     { 
      $and['reason_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then i would get only values like 1, 2, 3, 4, and then concatenate them to the index 
     } 
    } 
    if(preg_grep("/status_/", $this-> input-> post('and'))) // Search for status 
    { 
     foreach($this-> input-> post('and') as $value) // If it is in the super array 
     { 
      $and['status_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then I would get values again like 1,2,3,4,5 and then concatenate them to the index 
     } 
    } 
} 

Такой подход не дает мне ожидаемый результат, однако, я получаю большую строку так:

array(2) { ["reason_and"]=> string(24) "2 , 3 , 4 , 3 , 4 , 5 , " 
      ["status_and"]=> string(24) "2 , 3 , 4 , 3 , 4 , 5 , " 

Так что, насколько мне известно (что ограничено), когда я пытаюсь сделать foreach над массивом

[reason_and]

Я получаю только один цикл, так как массив ["reason_and] имеет только одно значение (24 символьная строка?). Возможно ли иметь причину и иметь значение для каждого из чисел?

Возможно ли это? Я совершенно смущен.

Я ссылаюсь на это question для справки, но у меня все еще нет результата, с которым я могу работать. Заранее спасибо.

+0

Сначала вы должны взорваться в другой массив, затем вы можете сделать еще один foreach. – Lefsler

+0

Что это значит? - Извините – user2406611

ответ

1

первую очередь preg_grep возвращает массив соответствующих значений, так

$andArray = $this-> input-> post('and'); // This is the super array and[] from a previous input field 

    if($andArray) { 

    $reason = preg_grep("/reason_/", $andArray); // Search for the reason_ 

     if($reason) { // if reason_ is present 

foreach($reason as $value) { 
       $and['reason_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then i would get only values like 1, 2, 3, 4, and then concatenate them to the index 
      } 
     } 

    $status = preg_grep("/status_/", $andArray); // Search for status 

     if($status) { 

      foreach($status as $value){ // If it is in the super array 

       $and['status_and'] .= end(explode('_', $value)) . ' , '; // Remove everything before and including _ so then I would get values again like 1,2,3,4,5 and then concatenate them to the index 
      } 
     } 
    } 

Или, если вам нужно привести в массив, а затем удалить «» и заменить точку с [];

+0

Вы буквально ответили на другой вопрос, который я собирался спросить, прежде чем я даже попрошу. Ты волнуешься! Я не читал документы хорошо на preg_grep. Огромное спасибо. – user2406611

3

Этот

 $and['reason_and'] .= end(explode('_', $value)) . ' , '; 
          ^^^^---- 

должен быть

 $and['reason_and'][] = end(explode('_', $value)) . ' , '; 
          ^^-- 

, который превращает его в "массив толчок" операции, а не конкатенации. Тогда 'reason_and' будет массивом, и вы заходите через него.

+0

Ты мне очень помог, мне хотелось бы принять два ответа и дать ответы +1, но другой ответ гораздо более подробно и помог мне разобраться в preg_grep. Спасибо, Марк – user2406611

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