PHP“从数组中删除”操作

时间:2013-11-21 01:31:35

标签: php arrays

假设您有一个填充了名字/姓氏的字典/关联数组的php数组,如下所示:

$userList = array(array('first'=>'Jim', 'last'=>'Kirk'), array('first'=>'George', 'last'=>'Bush'));
/*
$userList now looks like
{
    {
        first => Jim,
        last => Kirk
    },
    {
        first => George,
        last => Bush
    }
}
*/

如何告诉php "Remove elements from $userList as $users where $user['first'] === 'George'"

3 个答案:

答案 0 :(得分:1)

foreach并使用引用&来修改/取消设置该数组元素:

foreach($userList as &$user) {
    if($user['first'] == 'George') {
        unset($user);
    }
}

答案 1 :(得分:1)

array_filter与您想要的条件的回调一起使用

答案 2 :(得分:0)

我是这样做的(基于“查尔斯”来自This Question的答案)...

首先,我创建了一个函数工厂:

function createNotNamedFunction($first)
{
    return function($user) use($first) { 
        return $user['first'] !== $first;
    };
}

然后,当我需要过滤数组时,我会调用它:

$first = 'George';
$notNamed = self::createNotNamedFunction($first);
$filteredUsers = array_filter($userList, $notNamed);

简短易于理解可扩展(测试可以任意复杂,因为它是一流的功能),并且不涉及循环

此技术使用闭包array_filter,仅适用于PHP 5.3或更高版本,但这是我认为的规范答案。事实证明array_filter “从数组中移除”,当您为其提供任意测试时。

感谢所有提供替代模式的世界级php向导!