使用PHP

时间:2015-07-02 08:23:57

标签: php arrays

这是我使用mssql result中的array_push函数构建数组后的数组结果。

Array
(
    [0] => Array
        (
            [STICKER] => FALCON
            [MONTH] => 1
            [JUM] => 65826210.00
        )

    [1] => Array
        (
            [STICKER] => FALCON
            [MONTH] => 2
            [JUM] => 68070573.00
        )

    [2] => Array
        (
            [STICKER] => FALCON
            [MONTH] => 3
            [JUM] => 99053067.60
        )

    [3] => 
    [4] => Array
        (
            [STICKER] => HRD
            [MONTH] => 2
            [JUM] => 1521400.00
        )

    [5] => Array
        (
            [STICKER] => HRD
            [MONTH] => 3
            [JUM] => 2093200.00
        )
)

我需要将上面的数组转换为此结构:

Array
(
    [0] => Array
        (
            [0] => 
            [1] => 1
            [2] => 2
            [3] => 3
        )
    [1] => Array
        (
            [0] => FALCON
            [1] => 65826210.00
            [2] => 68070573.00
            [3] => 99053067.60
        )
    [2] => Array
        (
            [0] => HRD
            [1] => 0
            [2] => 1521400.00
            [3] => 2093200.00
        )
)

注意: Array[0]值为1,2,3(这是实际月份,我只输入3以便使代码不太长。但它将达到12(1月 - 12月))。

如果来自原始数组,则没有值(来自array[3]的示例),那么它将转换为值{0的新array[2]->[1]

非常感谢任何帮助。 谢谢大家!。

2 个答案:

答案 0 :(得分:1)

试试这个,

  

如果month stickers jum未被视为0,则未提及任何$array = array( array('STICKER' => 'FALCON', 'MONTH' => 1, 'JUM' => 65826210.00), array('STICKER' => 'FALCON', 'MONTH' => 2, 'JUM' => 68070573.00), array('STICKER' => 'FALCON', 'MONTH' => 3, 'JUM' => 99053067.60), array(), array('STICKER' => 'HRD', 'MONTH' => 2, 'JUM' => 1521400.00), array('STICKER' => 'HRD', 'MONTH' => 3, 'JUM' => 2093200.00), ); $result[0][] = ''; foreach ($array as $key => $res) { if (!empty($res)) { $result[0][$res['MONTH']] = $res['MONTH']; $result1[$res['STICKER']][$res['MONTH']] = $res['JUM']; } } foreach ($result1 as $key => $res) { $fin = array(); foreach ($res as $key1 => $re) { foreach ($result[0] as $key2 => $month) { if ($month != '') { if (array_key_exists($month, $res)) { if (!array_key_exists($month, $fin) && $month == $key1) { $fin[$month] = $re; } } else { $fin[$month] = 0; } } } } $result[] = array_merge(array($key), $fin); } echo'<pre>'; print_r($result); echo'<pre>';

Array
(
    [0] => Array
        (
            [0] => 
            [1] => 1
            [2] => 2
            [3] => 3
        )

    [1] => Array
        (
            [0] => FALCON
            [1] => 65826210
            [2] => 68070573
            [3] => 99053067.6
        )

    [2] => Array
        (
            [0] => HRD
            [1] => 0
            [2] => 1521400
            [3] => 2093200
        )

)

<强>结果:

.m

我希望这用于实现你的输出(你在上面的问题中提到过)!!

答案 1 :(得分:0)

尝试这样的事情 不是空数组的问题我无法理解该程序如何知道它是STICKER HRD所以它将填充零。但是你可以稍后检查是否每个月&#34; isset&#34;并且如果它不是因为它是零

$arr1=array(
 array('STICKER'=>'FALCON','MONTH'=>1,'JUM'=>65826210.00),
 array('STICKER'=>'FALCON','MONTH'=>2,'JUM'=>68070573.00),
 array('STICKER'=>'FALCON','MONTH'=>3,'JUM'=>99053067.60),
 array(),
 array('STICKER'=>'HRD','MONTH'=>2,'JUM'=>1521400.00),
 array('STICKER'=>'HRD','MONTH'=>3,'JUM'=>2093200.00),
);

$arr2=array();
$arr3=array();

$arr2[0][0]="";
foreach($arr1 as $key => $val){
 if(!empty($val)){
    $arr2[0][$val['MONTH']]=$val['MONTH'];

    //group each STICKER
    $arr3[$val['STICKER']][]=$val['JUM'];
 }
}

//transfer the grouped data to arr2
foreach($arr3 as $key => $val){

 $tmp_arr=array($key);

  $arr2[]=array_merge($tmp_arr,$val);
}


print_r($arr2);