我有一个名为$roster的数组,其中大约有16个较小的数组,如下所示(为了简洁起见,仅显示4个):

Array
(
    [0] => Array
        (
            [playerid] => 1055
            [firstname] => Christian
            [lastname] => McCaffrey
            [age] => 27
        )

    [1] => Array
        (
            [playerid] => 1362
            [firstname] => A.J.
            [lastname] => Brown
            [age] => 26
        )

    [2] => Array
        (
            [playerid] => 1897
            [firstname] => Joe
            [lastname] => Burrow
            [age] => 27
        )

    [3] => Array
        (
            [playerid] => 2019
            [firstname] => De'Von
            [lastname] => Achane
            [age] => 22
        )
)

我还有一个名为$notneeded的单独数组,其中只包含玩家ID,就像这样:

Array
(
    [0] => 1055
    [1] => 1495
    [2] => 1497
    [3] => 1897
    [4] => 1775
)

我想循环通过上面的数组,如果这5个playerid中的任何一个与较大数组中的playerid匹配,我想删除整个记录.

例如,由于1055和1897位于上面较小的数组中,因此我希望生成的数组中只剩下2名玩家(因为麦卡弗里和伯罗的所有信息都应该删除).

我try 了下面的代码,但没有发生任何事情(即,没有任何内容从$roster中删除)

foreach ($notneeded as $item) {
    // Search values and remove them from $roster
    if(($key = array_search($item, $roster)) !== false) {
        unset($roster[$key]);
    }
}

显然我不擅长使用数组,因为这似乎应该有点容易. 请让我知道我做错了什么/愚蠢了:)

推荐答案

问题

如果($key = array_search($item, $roster))的计算结果与false不同,您的代码才会从$roster数组中取消设置/删除元素. 然而,这里的array_search函数在$roster数组中搜索id,$roster数组是数组的数组,并且它在子数组中不会以回归的方式看起来.因此,在您的情况下,它将始终返回false,而不会返回unset任何元素.

溶液

您可以在PHP中使用array_filter函数.

来自文档:

array_filter(array $array, ?callable $callback = null, int $mode = 0): 

迭代数组中的每个值,将它们传递给回调函数.如果回调函数返回True,则数组中的当前值将返回到结果数组中.

在您的情况下,您可以用途:

$roster = array_filter($roster, function($element) use ($notneeded) {
    return !in_array($element["playerid"], $notneeded);
});

Php相关问答推荐

在保留唯一键值对的情况下高效合并嵌套数组

照明\Support\Collection::Filter():参数#1($Callback)的类型必须为?可调用、已给定数组、已调用

使用正则表达式搜索两个子字符串(没有重叠/共享字符)

PHP测试字符串的所有POST值

在Laravel中为表添加前缀,以将它们逻辑地分组

如何实现对数据库表中多列的唯一约束?

Laravel:如何展平多维Eager 加载的集合

使注册字段UserMeta值对于WooCommerce中的每个用户是唯一的

返回WooCommerce中的所有已启用变体

PHP:为什么递归需要这么长时间

如何在自定义邮箱内容中获取WooCommerce订单项目的详细信息?

Laravel 在数据库上显示加密列

PHP 中使用 JSON 的自定义会话处理程序会因错误而 destruct 会话

添加产品标签以通过 WooCommerce 邮箱通知订购商品

如何正确判断 PHP 是否已正确配置为使用 DOMDocument?

如何通过帖子自定义元数据进行查询

Laravel的Storage::exists返回false,而file_exists返回true.

如何在 Laravel 中修改嵌套数组的键?

Shopware 6:无法在新的自定义插件中保存关联字段(媒体)

htaccess 无限循环问题