我有这个数组:
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)]);
但它从表中删除了第一个元素,那么如何取消设置特定元素呢?
由于
答案 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; });