1

私は少しトリッキーなものを探しています:)

私は次のような多次元配列を持っています:

$array = array(
  "collection" => "departments",
  "action" => "find",
  "args" => array ("_id" => array("$in" => "{{variablename}}"))
);

後で変更するために、値{{variablename}}の参照が必要です。{{variablename}}が配列のどこにあるかを予測できないため、これは再帰関数である必要があります。

再帰性がなければ問題はありませんが、どうすればそれができるのかわかりませんでした。

PS:配列を文字列またはjsonに変換し、replaceを使用する他のソリューションには興味がありません。私は本当に参照が必要です。

4

1 に答える 1

0

あまりきれいではありませんが(再帰的でもありません。これは良いことです)、動作するはずです。

// Input data
$array = array(
  "collection" => "departments",
  "action" => "find",
  "args" => array ("_id" => array('$in' => "{{variablename}}"))
);

// Create a stack
$stack = array(&$array);

// Loop until the stack is empty
while (sizeof($stack) > 0) {
    // Get the first variable in the stack (by reference)
    foreach ($stack as &$current) break;
    // Remove the first variable from the stack (by reference, same as array_shift but array_shift breaks the references) 
    $stack = array_slice($stack, 1);
    // If the shifted variable is an array
    if (is_array($current)) {
        // Add all the array's values to the stack (by reference)
        foreach ($current as &$value) {
            $stack[] =& $value;
        }
    } 
    // If the shifted variable is the one we want
    elseif ($current == '{{variablename}}') {
        // Stop the loop, leaving $current as the reference to the variable we want
        break;
    }
}
$current = 'test';
var_dump($current);
var_dump($array);

例: http: //ideone.com/hEzZk

于 2012-04-30T14:15:37.303 に答える