这是我的数组的摘录:
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]);
}
}
但这会清除整个阵列,所以我不会得到结果。
什么是正确的解决方案?
答案 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]);
}
}