在php中找到未知的数组键?

时间:2018-12-16 07:17:50

标签: php

我有一个数组

$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中的数组数量也是可变的。

3 个答案:

答案 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]);
}