从PHP数组中删除对象

时间:2012-02-19 03:08:49

标签: php arrays

我有一个PHP数组的关联数组,格式如下:

array(1) {
  [0]=>
   { ["name"]=> "Steve Jobs"
     ["email"]=> "steve@gmail.com" }
} 

我对PHP很新,但我想要做的是搜索特定的电子邮件,如果找到,则从数组中删除该特定数组(名称和电子邮件对)(不会留下空白空间)已移除对象的数组。)

我在这里找到了这个代码,它搜索一个条目但返回一个数组。我如何修改它以删除找到的数组?

function search($array, $key, $value)
{
    $results = array();

    if (is_array($array))
    {
        if (isset($array[$key]) && $array[$key] == $value)
            $results[] = $array;

        foreach ($array as $subarray)
            $results = array_merge($results, search($subarray, $key, $value));
    }

    return $results;
}

4 个答案:

答案 0 :(得分:3)

这样的东西?

function delete_user(&$arr, $name){
    for($i = count($arr)-1; $i >= 0; $i--){
        if($arr[$i]["name"] == $name){
            unset($arr[$i]);
        }
    }
}

&$arr告诉PHP通过引用传递数组,因此可以从函数中修改它,否则它将被传递值。

答案 1 :(得分:0)

您必须使用unset删除元素,并使用in_arrayarray_search方法从数组中搜索元素。

unset($array[0]);

PHP手册(array_search)

中的示例
function array_key_index(&$arr, $key) {
    $i = 0;
    foreach(array_keys($arr) as $k) {
        if($k == $key) return $i;
        $i++;
    }
}

答案 2 :(得分:0)

我认为 raser 的答案存在一个小问题。我试着评论它,但我不能,因为我没有50的声誉。

如果您同意,请告诉我:count($arr)返回数组中元素的数量。他正在使用递减的for循环,除了数组的索引从0开始并且他的循环在它到达0之前结束,因此从不搜索数组的第一个元素。我相信正确的代码会是这样的:

function delete_user(&$arr, $name){
    for($i = count($arr) - 1; $i >= 0; $i--){
        if($arr[$i]["name"] == $name){
            unset($arr[$i]);
        }
    }
}

谢谢!

答案 3 :(得分:-3)

刚找到数组索引,

未设置(阵列(键));

这不会显示该数组