保持数组的顺序

时间:2012-01-08 19:56:47

标签: php arrays

我有一个可能包含零值的数组。

$array = array(3=> 1000, 5=> 0, 6=> 5000, 7 => 0);

由于使用该数组的代码无法管理设置为0的字段,因此我需要删除它们。 (我想在temp数组中存储0作为值的字段):

$zero_array = array();
foreach ($array as $k => $s) {
    $zero_array[$k] = $k;
    unset($stack[$k]);
}

在核心代码运行之后,我想要将具有0值的字段放回到与它们相同的位置。

核心代码返回如下数组:

$output = array(3 => 10, 6 => 50);

我想添加旧密钥并获取此信息:

$output = array(3 => 10, 5 => 0, 6 => 50, 7 => 0);

1 个答案:

答案 0 :(得分:3)

在这种情况下,只需使用array_filter即可删除0值:

$old_array = array(3 => 1000, 5=> 0, 6=> 5000, 7 => 0);
$new_array = array_filter($old_array);

// Now: $new_array = Array ( [3] => 1000 [6] => 5000 )

然后,做你想要的事情$new_array

// Core code: Divide each element by 100:
$new_array = array(3 => 10, 6 => 50);

然后使用array union operator后跟ksort来获取所需的数组:

$array = $new_array + $old_array;
ksort($array);

// Now: Array ( [3] => 10 [5] => 0 [6] => 50 [7] => 0 )

注意:如果Array ( [3] => 10 [6] => 50 [5] => 0 [7] => 0 )可以接受(IE。所有与所需数组相同的键值对,只是顺序不同),那么您可以跳过对ksort的调用。