1

これは、機能しているように見える私の元のコードの例です。

$MainArray =  array('Part1'=>array(Foo, 4, 2, Cat), 'Part2'=>array(Bar, 3, 1, Dog));
print_r ($MainArray);

戻り値:

Array ( [Part1] => Array ( [0] => Foo [1] => 4 [2] => 2 [3] => Cat ) [Part2] => Array ( [0] => Bar [1] => 3 [2] => 1 [3] => Dog ) ) 

私がやりたいのは次のようなものです(これらの部分はifステートメントに基づいて含まれています):

$ArrayPieces.="'Part1'=>array(Foo, 4, 2, Cat), ";
$ArrayPieces.="'Part2'=>array(Bar, 3, 1, Dog)";
$MainArray =  array($ArrayPieces);
print_r ($MainArray);

しかし、これは戻ります:

Array ( [0] => 'Part1'=>array(Foo, 4, 2, Cat), 'Part2'=>array(Bar, 3, 1, Dog))

これを機能させる方法について何か提案はありますか?ありがとう!

4

3 に答える 3

1

これを(必要に応じて)行う唯一の方法は、次を使用することeval()です。

<?php

$MainArray =  array('Part1'=>array('Foo', 4, 2, 'Cat'), 'Part2'=>array('Ba$
print_r ($MainArray);

$ArrayPieces = "return array(";
$ArrayPieces .= "'Part1'=>array('Foo', 4, 2, 'Cat'), ";
$ArrayPieces .= "'Part2'=>array('Bar', 3, 1, 'Dog')";
$ArrayPieces .= ");";

$MainArray =  eval($ArrayPieces);

print_r ($MainArray);

?>

配列文字列に戻り値がある理由は、eval式ではなくステートメントのみを受け入れるためです。

上記のコードはあなたが望むものを与えるでしょう:

Array
(
    [Part1] => Array
        (
            [0] => Foo
            [1] => 4
            [2] => 2
            [3] => Cat
        )

    [Part2] => Array
        (
            [0] => Bar
            [1] => 3
            [2] => 1
            [3] => Dog
        )

)

ただし、これは通常はお勧めしません。まったく!これは非常に安全ではなく(特にユーザー入力を評価する場合は、すべてではないにしてもほとんどの状況で回避する必要があります)、特定の状況では、それが価値があるよりも厄介です。

この問題の詳細については、これを参照してください。

PHPのeval悪はいつですか?

于 2013-03-11T03:54:50.343 に答える
0

あなたの質問がふりの状況に基づいていることを考えると、あなたが探しているものを正確に知ることは難しいですが、私はこのようなものがあなたが求めているものを達成するはずだと思います:

$MainArry = array();
if (foo)
    $MainArray['Part1'] = array(Foo, 4, 2, Cat);
if (bar)
    $MainArray['Part2'] = array(Bar, 3, 1, Dog);
于 2013-03-11T03:36:54.007 に答える
0

アレイを逆シリアル化しようとしているようです。あなたの例によると、あなたは文字列でPHP構文を構築し、後でそれを実行しようとしています。

これが絶対にやらなければならないことである場合はevalPHP関数を見てください

個人的には「評価」は好きではありません。

JavaScript Object Notationを使用する機会はありますか?もしそうなら、あなたの上記の例を次のように表現してください:

$json_pieces = '{';
$json_pieces .= '"Part1": ["Foo", 4, 2, "Cat"],';
$json_pieces .= '"Part2": ["Bar", 3, 1, "Dog"]';
$json_pieces .= '}'
$MainArray = json_decode( $json_pieces, TRUE );
print_r( $main_array );
于 2013-03-11T04:02:43.107 に答える