2011-12-29 3 views
1

Учитывая следующий массивPHP, толкая массив рекурсивно в пределах цикла Еогеасп

$a = array(
    'a' => '0', 
    'b' => '1', 
    'c' => '2', 
    'push' => array(
     'd' => '0', 
     'e' => '1', 
     'here' => array() 
    ) 
); 

И следующий набор петель:

// First level 
foreach($a as $key=>$value): 

    if($key=='push'): 

     //Second level 
     foreach($value as $key_=>$value_): 

      if($key_=='here'): 

       // If this key is found then do some stuff here and get another as a result array 
       $thirdArray = array(12, 13, 15); 

       // Then, I am looking to push this third array from within this loop 
       // Obviously, it should be placed inside this particular key of the array 
       // I am trying something like below which doesn't work 

       //array_push($value_, $thirdArray); 

       endif; 

     endforeach; 

    endif; 

endforeach; 

/* Выход печати мой массив должен быть

'a' => 'A', 
    'b' => 'B', 
    'c' => 'C', 
     'push' => array(
      'd' => '0', 
      'e' => '1', 
      'here' => array(

        array(12, 13, 15) 

      ) 


    */ 

Это дает мне большую головную боль ... и, похоже, не может найти решение. Большое спасибо за вашу помощь заранее.

+1

Я не совсем уверен, чего вы пытаетесь достичь? Не могли бы вы прояснить еще кое-что? – Oldskool

+0

@ user1099862 Вам нужно рассказать нам, какова ваша настоящая цель, а не какая-то абстрагированная версия. – jezmck

ответ

2
foreach($value as $key_=>$value_): 
    if($key_=='here'): 
    $thirdArray = array(12, 13, 15); 
    $a['push']['here'][] = $thirdArray; 
    endif; 
endforeach; 

или

foreach($value as $key_=>$value_): 
    if($key_=='here'): 
    $thirdArray = array(12, 13, 15); 
    $a[$key][$key_][] = $thirdArray; 
    endif; 
endforeach; 
+0

Фантастично, спасибо .. Я сохраню второй вариант, как в реальном примере, я не знаю названия ключа .. – user1099862

0
if($key_=='here'):  
    $value[$key_] = array(12, 13, 15);    
endif; 
+0

Не влияет на исходный массив, только копия внутри блока 'foreach'. – Matmarbon

0

Похоже

if(isset($a['push'])) 
if(isset($a['push']['here'])) 
    $a['push']['here'][] = array(12, 13, 15); 

будет самым быстрым способом o.o

0

Почему бы вам не использовать что-то вроде этого:

$a[$key][$key_] = array(12, 13, 15); 

в смену

$thirdArray = array(12, 13, 15); 

или в случае, если вы знаете место:

$a['push']['here'] = array(12, 13, 15); 
0

Вы также могли бы попытаться сделать замену $value и $value_ на ссылки, поэтому заменить их в строках 2 и 7 по &$value и &$value_, то вы должны быть в состоянии делать то, что вы хотите (array_push)

EDIT: Обратите внимание на то, что нет, не до PHP 5

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