从PHP中的数组中删除包含特定char的元素

时间:2017-10-17 17:41:07

标签: php arrays

这是我的数组的摘录:

Array
(
    [8] => Array
        (
            [item] => (pen)
            [sku] => 3
        )
    [11] => Array
        (
            [item] => cup
            [sku] => 34
        )
    [12] => Array
        (
            [item] => (bottle)
            [sku] => 23
        )
)

我必须取消设置" item"的所有元素。包含一个括号,因此在示例中我只需要[8]返回。

我已经尝试过这个:

foreach ($arr as $key => $ll) {
    if (strpos($ll,'(') !== false) {
        unset($arr[$key]);
    }
}

但这会清除整个阵列,所以我不会得到结果。

什么是正确的解决方案?

3 个答案:

答案 0 :(得分:1)

数组是多维的,您需要检查foreach ($arr as $key => $ll) { if (strpos($ll['item'], '(') !== false) { unset($arr[$key]); } }

()

或者,通过修剪(进行过滤并与原始内容进行比较,特别是如果您要检查))或仅$arr = array_filter($arr, function($v) { return trim($v['item'], '()') == $v['item']; });

prompt_pwd

答案 1 :(得分:0)

此处使用$b = array_filter( $array , function( $a ){ return !preg_match('/^\([^)]+\)$/', $a['item']); } ); 和自定义回调以及Regx

(...)

你可以在这里测试一下

http://sandbox.onlinephpfunctions.com/code/613514eaaa6f669d5fdc67706b60c0b90ea456b0

基本上返回Regx的负数,它匹配以{{1}}开头和结尾的任何内容,从数组中删除这些项。 (对于array_filter返回false)

-note-在foreach循环中取消设置是一个坏主意。有时这会产生一些奇怪的行为,因为PHP会创建一个临时的缓存原始数组,以便与循环一起使用。通常在foreach中使用pass by reference时会出现问题但我不相信它。

我发现在更改阵列结构时发生了一些非常奇怪的事情...大声笑。

答案 2 :(得分:-1)

您没有检查item元素。试试这个:

foreach ($arr as $key => $ll) {
    if (strpos($ll['item'], '(') !== false) {
        unset($arr[$key]);
    }
}