0

動的添字を使用して多次元配列に値を設定する方法を見つけたいと考えています。非常に簡単な例を示しましょう。

$deep['foo'] = array();
$deep['foo']['bar'] = "Elvis has left the building";
$meta = array( 'foo','bar' );
$super_meta = "[{$meta[0]}][{$meta[1]}]";
echo "\nWhere is Elvis? " . $deep[$meta[0]][$meta[1]] . ". Are we sure?\n";
echo "\nWhere is Elvis? " . $deep{$super_meta} . ".\n\n";

この例では、最初のエコー行は期待どおりに出力されますが、2 番目のエコー行では、構造体の何レベルまで進むElvis has left the buildingかは実行時までわかりません。$meta私の夢を実現するための必死の試みで、$deep{$super_meta}コマンドを追加しました。エラーはありませんが、空の文字列になります。ダーン。

夢が打ち砕かれたので、誰かが私を再び迎えに来て、ことわざの「PHPライト」を見せてくれることを願っています。

4

1 に答える 1

1

配列全体 ( $deep) から始めて、要素$metaごとに反復処理を行い、より深いネストされた配列を抽出する必要があります。これを試して:

$result = $deep;
foreach ($meta as $elem) {
    $result = $result[$elem];
}
echo $result;
// outputs "Elvis has left the building"

これにはエラー チェックは含まれないことに注意してください。要素が存在しない場合、大きな脂肪エラーが返されます。これは非常に簡単に処理できます。

$result = $deep;
foreach ($meta as $elem) {
    if (array_key_exists($elem, $result)) {
        $result = $result[$elem];
    } else {
        // Handle error in some way, maybe throw an exception
    }
}
于 2013-02-05T15:28:15.400 に答える