0

次のような多次元配列があります。

$arrayTest = array(0=>array("label"=>"test","category"=>"test","content"=>array(0=>array("label"=>"test","category"=>"test"),1=>array("label"=>"test","category"=>"test"))));

次に、コンテンツ配列のすべてのラベルを次のように設定します。

foreach($arrayTest as $obj) {
    foreach($obj["content"] as $anobj){
        $anobj["label"] = "hello";
    }
}

その後、配列を印刷します

echo json_encode($arrayTest);

私が見たブラウザで:

[{"label":"test","category":"test","content":[{"label":"test","category":"test"},{"label":"test","category":"test"}]}]

何も変わらないけどやってみると

$arrayTest[0]["content"][0]["label"] = "hello";
$arrayTest[0]["content"][1]["label"] = "hello";

それからそれは働いているようです。最初の方法が機能しない理由を知りたいですか?

4

1 に答える 1

1

変更を保持するには、参照によって配列を反復処理する必要があります。

foreach($arrayTest as &$obj) { // by reference
    foreach($obj["content"] as &$anobj){ // by reference
        $anobj["label"] = "hello";
    }
}

// Whenever you iterate by reference it's a good idea to unset the variables
// when finished, because assigning to them again will have unexpected results.
unset($obj);
unset($anobj);

または、ルートから開始して、キーを使用して配列にインデックスを付けることができます。

foreach($arrayTest as $key1 => $obj) {
    foreach($obj["content"] as $key2 => $anobj){
        $arrayTest[$key1]["content"][$key2]["label"] = "hello";
    }
}
于 2013-04-04T10:03:33.753 に答える