2013-03-30 2 views
0

У меня есть массив со случайными ключами (это строитель меню, который нужно нажать на json). Итак, в этом многомерном я пытаюсь сделать массив_push еще несколько деталей. Но вот что, я не знаю ключа или измерения в массиве. Я знаю только ключ.Найти ключ в массиве, и array_push в этом ключе

Так что я пытаюсь сделать это ниже.

$arr[unique_key1] = value; 
$arr[unique_key1][unique_key2] = 'value'; 
$arr[unique_key1][unique_key2][unique_key3] = 'value'; 
$arr[unique_key1][unique_key2][unique_key3][unique_key4] = 'value'; 

$key = unique_key4; // (example) key to look for and array push 

if (array_key_exists($key, $arr)) { // check to be sure, should be there 
    // here I want to loop until i found the specific key, and on that place array_push 
} 
else { 
    // error handeling 
} 

$ arr в этом примере прост, но реальный содержит около 800 записей в разных слоях.

Так, чтобы подвести итог:

  1. Найти ключ в большом массиве (он по-прежнему уникален)
  2. array_push к той части массива.

Премного

EDIT: более подробно объяснено, не было достаточно ясно

+0

рекурсивной функции, чтобы найти ключ в многомерном массиве будет то, что вы ищете, много примеров на гугле .. – dbf

ответ

0

я думаю, что это то, что вы хотите .. из ниже код, который вы получите, чтобы узнать ключ и делать то, что вы хотите ...

if ($array_in_which_we_can_add = multi_array_key_exists($key, $arr)) { 
     array_push($array_in_which_we_can_add, 'crap I want to add'); 
    } 
    else { 
     // error handeling 
    } 



function multi_array_key_exists($needle, $haystack) { 


foreach ($haystack as $key => $value) : 

    if ($needle == $key) 
     return $key; 

    if (is_array($value)) : 
     if (multi_array_key_exists($needle, $value) == true) 
      return true; 
     else 
      continue; 
    endif; 

endforeach; 

return false;} 

EDIT:

это будет делать exactl у, что вы хотели

if ($array_in_which_we_can_add = multidimensionalArrayMap($needle, $haystack)) { 
    print_r($array_in_which_we_can_add); 
} 
else { 
    // error handeling 
} 

$flag = 0; 

function multidimensionalArrayMap($needle, $haystack) { 
    $newArr = array(); 

    foreach($haystack as $key => $value) 
    { 
     if($key == $needle) 
     $flag = 1; 
     $newArr[ $key ] = ((is_array($value) && $key != $needle) ? multidimensionalArrayMap($needle, $value) :'crap I want to add'); 
    } 

    if($flag) 
    return $newArr; 

    return false; 

    } 
+0

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

+0

Я вижу, что вы сделали. Мой плохой, я был недостаточно ясен. Отредактировано – Matt

+0

Hm. Что именно вы знаете о ключе? $ arr [unique_key1] [unique_key2] [unique_key3] [unique_key4] [] = 'некоторое другое значение'; было бы очевидным способом вставить ... – bestprogrammerintheworld