1

既存の配列の値を検索するために使用する必要がある ajax 関数を介して渡されるフィールド名があります。例えば

$myarray = array(
    'name' => array(
        '0' => array(
            'first' => 'Steve'
        )
    ),
);


$incoming = 'name[0][first]';

したがって、 $incoming 変数を使用して、対応するデータを配列から取得したかったのですが、文字列を配列インデックスルックアップに変換する方法がわかりません。

配列内のネストのレベルに関係なく機能するメソッドを考え出そうとしています。

4

4 に答える 4

1

提案#1

リクエストを JSON として送信するように jQuery を変更します。これは、 json_decodeを使用して即座に PHP 配列に変換できます。

提案#2

JSON に切り替えることができない場合は、preg_splitを使用して入力フィールドを分割し、それらをループして正しい配列要素を取得します。次のようなもの:

$incoming = 'name[0][first]';

$parts = preg_split('/(\[|\])/', $incoming, null, PREG_SPLIT_NO_EMPTY);

$el = $myarray;
foreach ($parts as $part) {
    $el = $el[$part];
}

echo $el; // Steve
于 2012-04-13T21:55:51.660 に答える
0

あなたの例では、ここで爆発関数を使用してみてください - name[0][first] は配列を与えます - of (name, 0] , first] ) '['で爆発した後、リスト/配列として。最初の要素を破棄し、残りから「]」の部分を取り除きます。後で、それらをそれぞれの形式 (整数、文字列など) に変換できます。

于 2012-04-13T22:10:16.723 に答える
0

これは、常に 3 つ以下のキーがあると仮定して機能します。「$keyX」変数と「if($numkeys == X)」を追加して、配列が大きくなってもかまいませんが、より柔軟な修正が見つかりませんでした

$incoming = 'name[0][first]';

$numkeys =  preg_match_all('/[\[]/', $incoming, $matches) + 1;

$split = preg_split('/[[\]]/', $incoming);
$key1 = $split[0];
$key2 = $split[1];
$key3 = $split[3];

if($numkeys == 1) {
echo $myarray[$key1];
} elseif ($numkeys == 2) {
echo $myarray[$key1][$key2];
} elseif ($numkeys == 3) {
echo $myarray[$key1][$key2][$key3];
}
于 2012-04-13T22:01:34.273 に答える
0

eval関数を使用できます...これは非常に推奨されませんが、特にクライアントの文字列を取得する場合(書き込みを理解していれば)

 $incoming = 'name[0]["first"]';
 eval('$value = $'+$incoming+';');
 echo $value;

このスクリプトは、配列内の特定のセルのデータを出力する必要があります...

繰り返しますが、入力が期待どおりの形式であることを確認しない限り、これはお勧めできません...

于 2012-04-13T22:03:23.697 に答える