0

「可視」が「0」に設定されているすべての配列オブジェクトを削除しようとしているだけです

配列:

{
"Count":5,
"0":{"id":"1","visible":"0"},
"1":{"id":"3","visible":"0"},
"2":{"id":"1","visible":"0"},
"3":{"id":"2","visible":"0"},
"4":{"id":"3","visible":"0"}
}

PHP:

function cleanup($arr) {
    for($i = 0; $i < (count($arr)-1); $i++) {
        if($arr[$i]['visible'] == false) {
            unset($arr[$i]);
        }
    }
    $newarr = array_unique($arr, SORT_REGULAR);
    $newarr['Count'] = count($newarr)-1;

    return $newarr;
}

結果:

{
"Count":2,
"3":{"id":"2","visible":"0"},
"4":{"id":"3","visible":"0"}
}

私の考えでは、これは機能し、{"Count":0} を返すはずです。また、「キー」が 3,4 ではなく 0,1 に設定されていないのはなぜですか。どこが間違っているのですか?

4

2 に答える 2

2

for ループ内で count($arr)-1) を使用しており、反復ごとに再評価されるため、最初の 3 回の設定を解除した後、i は 3 ですが、count($arr)-1) は 1 です。ループを終了します。for ループの前に $j=count($arr)-1 を設定し、 for($i = 0; $i < $j; $i++) を使用する必要があります。

一般に、for ループ内で count() のような関数を使用することは、(パフォーマンスの観点から) プログラミングの実践としては不適切です。

于 2013-10-04T23:52:51.190 に答える