1

コードをこのようにしたい場合、方法はありますか

foreach ($a as $key=>$value) {
    if (( $value['someprop'] == 'some prop' ) || ( $value['someprop'] == 'some other prop' ))
        array_splice($a, $key, 1); 

配列キーはarray_spliceでシフトされるため

4

2 に答える 2

1

for ループを使用して、配列の末尾から逆方向にカウントします。

(こうすれば、インデックスの変更で問題が発生することはありません)

for($i = count($myArray); $i>0; $i--)
{
    $value = $myArray[$i];
    if (( $value['someprop'] == 'some prop' ) || ( $value['someprop'] == 'some other prop' ))
        array_splice($myArray, $i-1, 1); 
}
于 2015-11-02T10:36:11.583 に答える
1

array_filter代わりに、よりエレガントなものを使用してください。

$a = [
    ['someprop' => 'some prop'],
    ['someprop' => 'not some prop'],
    ['someprop' => 'some other prop'],
];

方法:

$filtered = array_filter($a, function($value) {
    return !($value['someprop'] == 'some prop' || $value['someprop'] == 'some other prop');
});

print_r($filtered):

Array
(
    [1] => Array
        (
            [someprop] => not some prop
        )

)

http://php.net/manual/en/function.array-filter.php

于 2015-11-02T11:44:38.947 に答える