首页 > 解决方案 > 如何删除多维数组值PHP中不在数组中的值

问题描述

这是 $multidimensional 数据结果:

[
    {
        "2018-11-02": [
            "2"
        ]
    },
    {
        "2018-11-02": [
            "8",
            "3"
        ]
    }
    {
        "2018-11-21": [
            "11",
            "35",
            "94",
            "98",
            "163"
        ]
    },
]

$filter = [3,98,11]

如何删除$multidimensional不存在值的对象和值$filter以及取消设置后,结果将变成如下对象:

{
  "3": 2018-11-02,
  "98": 2018-11-21,
  "11" : 2018-11-21
}

就我而言,我使用的是 unserialize :

for($w=0;$w<count($multidimensional);$w++) {
      $hasilId2[] = (object) [
        $multidimensional[$w]->date=> unserialize($multidimensional[$w]->invoiceid)
      ];
    }

我已经尝试过使用循环:

foreach($multidimensional as $key => $value) {
      if(!in_array($key, $filter)) {
        unset($multidimensional[$key]);
      }
    }

标签: php

解决方案


您需要一个用于主数组的循环和一个用于内部数组的循环

所以最好把2个循环放在一起

也没有必要使用

您可以将正确的结果放在单独的变量中,然后使用它

您希望该数组的键成为最终的数组值

所以我使用 key 函数来获取数组键并给出这样的新值:

$result[array value] = [array key];

最后我打印了新数组:

$multidimensional = [
    [
        "2018-11-02" => [
            "2"
        ]
    ],
    [
        "2018-11-02" => [
            "8",
            "3"
        ]
    ],
    [
        "2018-11-21" => [
            "11",
            "35",
            "94",
            "98",
            "163"
        ]
    ],
];

$filter = [3, 98, 11];
$result = [];
foreach ($multidimensional as $val1) {
    foreach (array_values($val1)[0] as $key => $val2) {
        if (in_array($val2, $filter)) {
            $result[$val2] = key($val1);
        }
    }
}
print_r($result);

结果:

Array
(
    [3] => 2018-11-02
    [11] => 2018-11-21
    [98] => 2018-11-21
)

推荐阅读