PHP:如何重新排序二维数组

时间:2014-04-01 15:45:05

标签: php

这就是$myArray的样子:

Array
(
    [0] => Array
        (
            [month] => 1
            [atual] => 0.00
        )

    [1] => Array
        (
            [month] => 2
            [atual] => 11970.99
        )

    [2] => Array
        (
            [month] => 3
            [atual] => 2888.00
        )

    [3] => Array
        (
            [month] => 5
            [atual] => 1500.00
        )

)

我想"填补空白"几个月也就是说,对于那些我们没有数据(4,6,8,9,10,11,12)的月份,我希望[atual]为零。

我试过了:

$novo=array();

for ($i=1; $i <=12 ; $i++) {
    $mes=$myArray[$i-1]['month'];
    $atual=$myArray[$i-1]['atual'];

    if(!$mes){
        $novo[$i]=0;
    } else{
        $novo[$i]=$atual;
    }
};

但这又回来了:

Array
(
    [1] => 0.00
    [2] => 11970.99
    [3] => 2888.00
    [4] => 1500.00
    [5] => 0
    [6] => 0
    [7] => 0
    [8] => 0
    [9] => 0
    [10] => 0
    [11] => 0
    [12] => 0
)

5 个答案:

答案 0 :(得分:1)

[edit]现在我看到你有另一个问题,你的$myArray索引与月份不匹配。

$myArray( 
    array('month' => 1, 'atual' => 0.00),
    array('month' => 2, 'atual' => 11970.99),
    array('month' => 3, 'atual' => 2888.00),
    array('month' => 5, 'atual' => 1500.00)
)

for($i = 1; $i <= 12; $i++){
    $novo[$i] = 0;
}

foreach($myArray as $item){
    $novo[$item['month']] = $item['atual'];
}

print_r($novo);

答案 1 :(得分:1)

这有效:

$novo=array_fill(1,12,0);

for ($i=1; $i <=12 ; $i++) {
            $mes=$myArray[$i-1]['month'];
            $atual=$myArray[$i-1]['atual'];

            $novo[$mes]=$atual;

};

答案 2 :(得分:0)

使用此代码,您将获得位置1中的第1个月(不在第0位); 您也只能在阵列中搜索一次。 这不是一个美丽的解决方案,但......

$my_array = array(
array('month'=>3,'actual'=>100)
);

$results =array();
for($i=1;$i<13;$i++){
    $results[$i] = 0;
}

foreach($my_array as $a){
    $results[$a['month']] = $a['actual'];
}
print_r($results);

答案 3 :(得分:0)

答案 4 :(得分:0)

我在第一个回复中没有完全理解你的问题。此代码应该适合您。首先,我们将创建一个临时数组,以便以可访问的格式保存月份和数据。然后我们创建你的数组:

$temp=array();

// Populate the temp array
foreach ($myArray as $row) {
    if (is_array($row) && isset($row["month"])) {
        $temp[$row["month"]] = $row["atual"];
    }
}

// Create novo array
for ($i=0; $i <12 ; $i++) {
    $novo[$i]["month"] = $i+1;
    if (array_key_exists($i+1, $temp)) {
        $novo[$i]['atual'] = $temp[$i+1];
    } else {
        $novo[$i]['atual'] = 0;
    }
}