从数组PHP中取消设置特定元素

时间:2014-03-05 14:41:29

标签: php arrays

我有这个数组:

Array
(
    [0] => Array
        (
            [nid] => 1
            [language] => EN
            [uid] => 1
            [tid] => page
            [title] => Welcome
            [body] => 
Comming Soon.


            [date_post] => 2014-02-18 08:27:56
            [enable] => 1
        )

    [1] => Array
        (
            [nid] => 2
            [language] => EN
            [uid] => 1
            [tid] => page
            [title] => Our Stuff
            [body] => 
Comming Soon.

            [date_post] => 2014-02-18 08:27:56
            [enable] => 1
        )

    [2] => Array
        (
            [nid] => 3
            [language] => EN
            [uid] => 1
            [tid] => page
            [title] => Partners
            [body] => 
Comming Soon.


            [date_post] => 2014-02-18 08:27:56
            [enable] => 1
        )

等等...我想做什么我取消了元素如何标题Partners例如,所以我尝试了这个:

unset($pages[array_search('Partners',$pages)]);

但它从表中删除了第一个元素,那么如何取消设置特定元素呢?

由于

2 个答案:

答案 0 :(得分:4)

array_search()仅搜索主数组中的元素。这些元素本身就是数组,因此返回false。您需要使用数组函数或循环遍历每个子数组:

foreach($array as $key => $value) {
    if($value['title'] == 'Partners') {
        unset($array[$key]);
    }
}

答案 1 :(得分:4)

这是因为array_search会在您的数组中搜索字符串'Partners'。但由于您的阵列只包含3个数组,因此找不到任何条目。 array_search会生成false,其评估结果为0。这就是删除第一个密钥的原因。

您需要在每个数组(foreach ($myarray as $array) { ... })内搜索。你还必须检查返回值:

$value = array_search(...);
if ($value !== false) {
    // do unset
}

array_filter的解决方案:

// Remove all arrays having 'title' => 'Partners'
$arr = array_filter($arr, function($e) { return $e['title'] != 'Partners'; });

// Remove all arrays containing a value 'Partners'
$arr = array_filter($arr, function($e) { return array_search('Partners', $e) === false; });