0

ランダムなキーを持つ配列があります (これは、json にプッシュされるメニュー ビルダーです)。したがって、この多次元では、さらに詳細を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 は単純ですが、実際の $arr にはさまざまなレイヤーに約 800 のエントリが含まれています。

要約すると:

  1. 大きな配列でキーを見つけます(まだ一意です)
  2. 配列のその部分に array_push します。

とても感謝しております

EDIT:より詳細に説明しましたが、十分に明確ではありませんでした

4

1 に答える 1

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;} 

編集:

これはあなたが望んでいたことを正確に行います

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;

    } 
于 2013-03-30T19:48:17.310 に答える