我有一个数组
$array = array (
'pubMessages' =>
array (
0 =>
array (
'msg' => 'Not bad',
'type' => 'warning',
),
1 =>
array (
'msg' => 'Bad',
'type' => 'error',
),
),
);
要删除具有'type'=>'error'的子数组,我使用下面的代码
$key = array_search('error', $array);
unset($array["pubMessages"][$key]);
数组 pubMessages 的键名每次都会更改,请告诉我如何动态获取此键名? pubMessages中的数组数量也是可变的。
答案 0 :(得分:3)
使用array_keys()
获取动态键名,然后遍历内部数组并检查键Application.Current.MainPage = (new UserLoginPage());
是否等于type
并将其删除。
error
在demo中查看结果
答案 1 :(得分:2)
在这种搜索中,我会使用array_filter()
,就像这样:
$array = array(
'pubMessages' => array (
0 => array (
'msg' => 'Not bad',
'type' => 'warning'
),
1 => array (
'msg' => 'Bad',
'type' => 'error'
)
)
);
// array_search() will return false. It is not how
// array_search() works on a multi-dimensional array
// $key = array_search('error',$array);
function findError($a) {
return ($a['type'] != 'error');
}
// deal with "unknown" first index / key name issue
$idx = array_keys($array)[0];
$array[$idx] = array_filter($array[$idx],"findError");
var_dump($array);
exit;
输出将是:
array(1) {
["pubMessages"]=> array(1) {
[0]=> array(2) {
["msg"]=> string(7) "Not bad"
["type"]=> string(7) "warning"
}
}
}
编辑:针对未知键/索引问题添加了修复程序
答案 2 :(得分:1)
您可以在整个数组上使用foreach()
来拾取任何元素。
主要问题是你在说
$key = array_search('error', $array);
这不会遍历所有子数组等来找到值,只是顶层。由于错误出在数组的type
列中,因此您必须提取该列并在此数组中搜索。您可以使用array_column()
来挑选数据。
foreach ( $array as &$subarray ) {
$key = array_search('error', array_column($subarray, "type"));
unset($subarray[$key]);
}