0

私が次を持っているとしましょう:

Array(
[0] => Array
    (
        [id] => 1
        [item] => first item
    )

[1] => Array
    (
        [id] => 3
        [item] => second item
    )

[2] => Array
    (
        [id] => 5
        [item] => third item
    )

)

= 5のアイテムを削除したいのですがid、配列をループして設定を解除できることはわかっていますが、より直接的で効率的な解決策を望んでいます。

4

4 に答える 4

3

ID を外側の配列のキーにすることができない場合 (その場合は、単純に を使用できますunset($arr[5]);)、配列をループすることが実際に dg の方法です。

foreach($arr as $key => $value) {
    if($value['id'] === 5) {
        unset($arr[$key]);
        break;
    }
}

別のオプションは次を使用することですarray_filter-新しい配列を作成するため、効率は低下します:

$arr = array_filter($arr, function($value) {
    return $value['id'] !== 5;
});
于 2012-11-01T19:34:08.530 に答える
1

キーをIDに設定した配列を作成してみませんか?例えば:

Array(
[1] => Array
    (
        [id] => 1
        [item] => first item
    )

[3] => Array
    (
        [id] => 3
        [item] => second item
    )

[5] => Array
    (
        [id] => 5
        [item] => third item
    )

)

次に、次のように記述できます。

<?php    
unset($array[5]); // Delete ID5
?>
于 2012-11-01T19:35:18.100 に答える
1

マルチレベルのネストされた配列の場合

<?php
    function remove_array_by_key($key,$nestedArray){
        foreach($nestedArray as $k=>$v){
            if(is_array($v)){
                remove_array_by_key($key,$v);
            } elseif($k==$key){
                unset($nesterArray[$k]);
            }
        }
        return $nestedArrat;
    }
?>
于 2012-11-01T19:40:59.380 に答える
0

最も効率的な方法は、2 つの配列を持つことです。

ID => Index
Index => Object (your current array)

ID => Index ヘルパー配列で ID を検索すると、値がメイン配列の Index になり、両方の設定が解除されます。

于 2012-11-01T19:39:38.623 に答える