0

我有这个以这种方式格式化的数组集合:

$collection = array(
    '0' => array(
        'user_id' => 12345
        'name' => 'test'
    ),
    '1' => array(
        'user_id' => 6789
        'name' => 'test2'
    ),
)

我的问题是我不想创建一个 for 循环来搜索 id:6789。

目前,我正在做的是:

$user_id = 6789
foreach($collection as $key => $collect)
{
    if($collect['user_id'] == $user_id)
    {
         unset($collection[$key]);
    }
}

我只想问是否有一种更有效的方法来删除数据而不是执行 for 循环。

谢谢。

4

3 回答 3

0

php中有一个函数叫做array_walk_recursive()你可以在这里找到文档:

http://www.php.net/manual/en/function.array-walk-recursive.php

我不确定它是否会比使用循环更有效,但它应该满足你的要求

于 2013-11-09T06:32:13.730 回答
0

由于项目存储在多维数组中,我想不出更好的方法来查找密钥。但是,如果您可以通过将 user_id 放入键中来以不同方式构建初始数组,例如:

$collection = array(
    '12345' => array(
        'user_id' => 12345
        'name' => 'test'
    ),
    '6789' => array(
        'user_id' => 6789
        'name' => 'test2'
    ),
)

然后你可以做

$user_id = 6789;
unset($collection[$user_id ]);
于 2013-11-09T06:52:26.953 回答
0

您也可以使用 array_filter 来完成此操作。鉴于您的输入:

$collection = array(
    '0' => array(
        'user_id' => 12345,
        'name' => 'test',
    ),
    '1' => array(
        'user_id' => 6789,
        'name' => 'test2',
    ),
);

$user_id = 6789;

您可以使用:

$new_collection = array_filter( $collection, function($item) use ($user_id) {
  return $item['user_id'] != $user_id;
});

希望有帮助

于 2013-11-09T06:59:33.853 回答