我写了什么错误的代码在我的array_shift函数


Have I written anything wrong in my code for array_shift function?

我的关联数组$data如下:

Array
(
    [op] => add
    [main_op] => 
    [rebate_id] => 
    [form_submitted] => yes
    [company_id] => 42
    [product_id] => 36
    [applicable_states] => Array
        (
            [0] => Array
                (
                    [state_id] => multiselect-all
                )
            [1] => Array
                (
                    [state_id] => 1
                )
            [2] => Array
                (
                    [state_id] => 2
                )
            [3] => Array
                (
                    [state_id] => 3
                )
            [4] => Array
                (
                    [state_id] => 4
                )
            [5] => Array
                (
                    [state_id] => 5
                )
       )
)

我想把数组$data['applicable_states']向后移动一个。我写了下面的代码,但它不工作。你能帮我改正一下代码中的错误吗?以下是我的代码:

if (array_search('multiselect-all', $data['applicable_states']) === 0) 
        array_shift($data['applicable_states']);

期望的输出数组如下:

Array
(
    [op] => add
    [main_op] => 
    [rebate_id] => 
    [form_submitted] => yes
    [company_id] => 42
    [product_id] => 36
    [applicable_states] => Array
        (
            [0] => Array
                (
                    [state_id] => 1
                )
            [1] => Array
                (
                    [state_id] => 2
                )
            [2] => Array
                (
                    [state_id] => 3
                )
            [3] => Array
                (
                    [state_id] => 4
                )
            [4] => Array
                (
                    [state_id] => 5
                )
       )
)

你的代码有一个问题-你有一个复杂的数组,所以它不会工作- array_search不会找到值(将始终返回false)

作为解决方案,您应该简单使用:

if ($data['applicable_states'][0]['state_id'] == 'multiselect-all') {
    array_shift($data['applicable_states']);   
}

像您的答案和给定的数据一样,您可以简化array_maparray_filter来使用您给定的规格。

$data['applicable_states'] = array_filter(array_map(function($v){
    return ($v['state_id'] != 'multiselect-all') ? $v : null;
}, $data['applicable_states']));
http://de3.php.net/manual/en/function.array-map.php

http://php.net/manual/en/function.array-filter.php