我的关联数组$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_map
和array_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