1

データベースクエリから構築された配列があります。配列の値posuitionに基づいて、別の文字列を割り当てる必要があります。

foreachループ内のifステートメントが前進する方法だと思いましたが、問題が発生しています。

以下は私のコードです......

$test = array(
            array("test", 1),
            array("test2", 2),
            array("test4", 4),
            array("test5", 5),
            array("test3", 3),
            array("test6", 6)
            );


foreach($test as $t) {
if($t[1]==1){
    array_push($t, "hello World");
    }
}
print_r$test);

array_push以外は、すべてが機能します。ループの後にprint_r($ test)を実行すると、何も追加されません。

私はここで記念碑的に愚かなことをしていますか?...

これは私がprint_r($ test)した場合に得られるものです

Array
(
[0] => Array
    (
        [0] => test
        [1] => 1
    )

[1] => Array
    (
        [0] => test2
        [1] => 2
    )

[2] => Array
    (
        [0] => test4
        [1] => 4
    )

[3] => Array
    (
        [0] => test5
        [1] => 5
    )

[4] => Array
    (
        [0] => test3
        [1] => 3
    )

[5] => Array
    (
        [0] => test6
        [1] => 6
    )

)

テスト1には「helloworld」と呼ばれる3番目の値があると思います。

4

2 に答える 2

5

Foreachループは、配列のコピーで機能します。そのため、元の配列を変更する場合は、参照を使用する必要があります。

foreach($test as &$t) {
   if($t[1]==1){
      array_push($t, "hello World"); // or just $t[] = "hello World";
   }
}
于 2012-08-17T09:10:21.660 に答える
5

いいえ、あなたは記念碑的に愚かなことを何もしていません。ただし、foreachループ内から配列を変更する場合は$test、それを参照として渡す必要があります。

foreach($test as &$t) // Pass by reference
{
    if( $t[1] == 1 )
    {
        array_push($t, "hello World"); // Now pushing to $t pushes to $test also
    }
}
于 2012-08-17T09:11:04.627 に答える