2009-08-28 10 views
1

多次元配列では、必ずしも構造を知っているわけではありません。名前でキーを検索して内容を変更したり追加したりする方法は?キーの値は文字列でも配列でも、どちらの方法でもエフェクトを適用する必要があります。array_walk_recursiveを見ていましたが、別の配列を含むものは無視されます...PHPで配列キーを見つけ、その値や内容を変更しますか?

答えて

2

これは機能しますか?

function arrayWalkFullRecursive(&$array, $callback, $userdata = NULL) { 
    call_user_func($callback, $value, $key, $userdata); 

    if(!is_array($array)) { 
     return false; 
    } 

    foreach($array as $key => &$value) { 
     arrayWalkFullRecursive($value); 
    } 

    return true; 
} 

arrayWalkFullRecursive($array, 
    create_function(    // wtb PHP 5.3 
     '&$value, $key, $data', 
     'if($key == $data['key']) { 
      $value = $data['value']; 
     }' 
    ), 
    array('key' => 'foo', 'value' => 'bar') 
); 
+0

かなりうまくいっていませんでしたが、正しい軌道に乗ってくれました。配列項目を削除するためのremove_recursive()という関数をまとめました。add_recursive()とchange_recursive()を作成する必要があります。 :) –

+0

@Belanger、私の問題は何ですか?何がうまくいかなかったのですか? – strager

+0

ああ、待って、私は知っていると思う。私は私の答えを編集します。 – strager

1

PHPの配列キーはintですと文字列。配列の配列キーを持つことはできません。そう、ええ、array_walk_recursive()あなたが欲しいものです。

Arrays
+0

これは、キーに対応する値を意味します。値が配列の別のレベルであれば、配列をスキップし、配列以外の値を持つものが見つかるまで内部的に再帰します。 –

0

から:キーは、整数または文字列のいずれであってもよい

アレイはキーとして使用できません。

配列のキーを取得するには、array_keysを使用します。