-3

私は配列を持って$arr=array("a"=>array("b"=>123)) います、そして私はそれを次のようにする必要があります:

$a='[a][b]';
echo $arr{$a};

しかし、それは機能しません。

echo $arr[a][b];-正常に動作しますが、それは私が必要とするものではありません。=(

PHPマニュアルによると:

$$ a 1と書く場合、パーサーは$ a 1を変数として使用するのか、$$ aを変数として使用し、次にその変数の1インデックスを使用するのかを知る必要があります。このあいまいさを解決するための構文は、最初のケースでは$ {$ a 1 }、2番目のケースでは$ {$a} 1です。>> phpマニュアル

しかし、「エコー${$a};」および「echo$arr{$a};」他のすべてのバリエーションは何も出力しません。

アップデート

つまり、フォームを介して連想配列の要素を削除する必要があります。たとえば、$ a = array('abc' =>'def');があります。およびhtmlフォーム

<form><input name="deleteIT" value="[abc]"></form>

したがって、送信後、$a変数$deleteIT値から削除したいと思います。

4

1 に答える 1

2

これはあなたが必要とするものに十分近いですか?

$a = "a,b";
list( $i, $j ) = explode( ",", $a );
echo $arr[$i][$j];

補遺:$arr配列が常に正確に2つのレベルを持っている場合、上記の答えは機能します。それが多い(または少ない)可能性がある場合は、次のようなものが機能する可能性があります。

function array_get_nested ( $array, $keys ) {
    $value = $array;
    foreach ( $keys as $index ) {
        $value = $value[ $index ];
    }
    return $value;
}

上記の関数は、引数として2つの配列を取ります。1つは必要な値を含み、もう1つは最初の配列でそれを見つけるために必要なキーをリストします。たとえば、次のような配列がある場合:

$arr = array( "a" => array( "b" => array( "c" => 123 ) ) );

それから

echo array_get_nested( $arr, array( "a", "b", "c" ) );

印刷します123

文字列キーを2番目の引数に適した配列に変換することは、キーのフォーマット方法によって異なりますが、適切な区切り文字を使用しarray_get_nested()て呼び出すのと同じくらい簡単な場合があります。explode()たとえば、上記のコードの最後の行は次のように書き直すことができます。

$k = "a,b,c";
echo array_get_nested( $arr, explode( ",", $k ) );

ネストされた配列を変更するには、同様の関数を使用できます。

function array_set_nested ( &$array, $keys, $value ) {
    $ref =& $array;
    foreach ( $keys as $index ) {
        $ref =& $ref[ $index ];
    }
    $ref = $value;
}

PHPは便利なことに配列を「自動化」するので、たとえば、以前に定義されていない変数を取得して、次のよう$fooにするだけで3レベルのネストされた配列に変換できます。

array_set_nested( $foo, array( "a", "b", "c" ), 123 );
于 2012-09-17T18:46:41.567 に答える