2017-02-28 111 views
0

我找过去3个月状态明智data.I都状态码的排列和最后3个月阵列具有以下值的两个数组值,PHP的发现结果多维数组

$stateArray = array("Nj","va","Ca","BS","TS"); 
$MonthArray =array("Nov 2016","Dec 2016","Jan 2017"); 

下面是我的结果从数据库中取数组,

Array ( 
     [0] => Array ( 
      [month] => Nov 2016 
      [count] => 150 
      [state] => NJ 
     ) 
     [1] => Array ( 
      [month] => Nov 2016 
      [count] => 100 
      [state] => va 
     ) 
    ) 
     I want result like below, 

     Array(
       [Nj] => Array(
         [0] => Array(
            [month] => Nov 2016 
            [count] => 150 
            ) 
         [1] => Array(
            [month] => Dec 2016 
            [count] => 0 
            ) 
         [2] => Array(
            [month] => jan 2017 
            [count] => 0 
            ) 
        ) 
       [Ca] => Array(
         [0] => Array(
            [month] => Nov 2016 
            [count] => 0 
            ) 
         [1] => Array(
            [month] => Dec 2016 
            [count] => 0 
            ) 
         [2] => Array(
            [month] => jan 2017 
            [count] => 0 
            ) 
        ) 
       [va] => Array(
         [0] => Array(
            [month] => Nov 2016 
            [count] => 100 
            ) 
         [1] => Array(
            [month] => Dec 2016 
            [count] => 0 
            ) 
         [2] => Array(
            [month] => jan 2017 
            [count] => 0 
            ) 
        ) 
      ) 

等等所有状态。

我试图阵列array_search()并为每个in_array()功能,但它不是我working.What想实现循环每个状态明智array.Below我想为循环,

foreach ($result_array as $val) { 
    $month = array_search ($val ['month'], $monthArray); 
    $state = array_search ($val ['state'], $stateArray); 
    if ($val ['count'] == '' || $val ['count'] == 'NULL') { 
     $countValue = 0; 
    } else { 
     $countValue = $val ['count']; 
    } 
    $final_array [] = $countValue; 
} 
+0

所有这些模式不是有效的PHP:'$ VAL [ '月']'。删除变量名和括号之间的空白字符。 – arkascha

+0

好吧,我删除了这个空白区域,但预计结果没有得到。 – bdevloper

回答

1

乘坐看这个简单的例子:

<?php 
$input = [ 
    [ 
     'month' => "Nov 2016", 
     'count' => "150", 
     'state' => "NJ" 
    ], 
    [ 
     'month' => "Nov 2016", 
     'count' => "100", 
     'state' => "va" 
    ], 
    [ 
     'month' => "Dec 2016", 
     'count' => "270", 
     'state' => "NJ" 
    ], 
]; 
$output = []; 
foreach (["Nj", "va", "Ca", "BS", "TS"] as $state) { 
    $output[strtoupper($state)] = []; 
}; 

array_walk($input, function($entry) use (&$output) { 
    $output[strtoupper($entry['state'])][] = [ 
     'month' => $entry['month'], 
     'count' => $entry['count'] 
    ]; 
}); 

print_r($output); 

上述代码的结果是:

Array 
(
    [NJ] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 150 
       ) 

      [1] => Array 
       (
        [month] => Dec 2016 
        [count] => 270 
       ) 

     ) 

    [VA] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 100 
       ) 

     ) 

    [CA] => Array 
     (
     ) 

    [BS] => Array 
     (
     ) 

    [TS] => Array 
     (
     ) 

) 

这似乎是你问的确切输出结构。

+0

我们已经设置了状态和蛾类。我们必须循环每个月份的设置。 – bdevloper

+0

@bhagwanpawar当然,我明白你的问题。该示例_does_循环给定结果集中的所有条目。你想说你的结果集不包含状态和月份的所有组合的条目吗?所以你有不完整的数据? – arkascha

+0

我们要追加零结果集,这些都不是在合成阵列 – bdevloper

1
 $stateArray = array("Nj","va","Ca","BS","TS"); 
    $MonthArray =array("Nov 2016","Dec 2016","Jan 2017"); 
    $fromDB = Array (
     Array (
      'month' => 'Nov 2016', 
      'count' => 150, 
      'state' => 'NJ' 
      ), 
     Array (
      'month' => 'Nov 2016', 
      'count' => 100, 
      'state' => 'va' 
      ) 
     ); 
    $info = array(); 
    foreach ($fromDB as $row){ 
     $info[strtoupper($row['state'])][$row['month']] = $row['count']; 
    } 
    $result = array(); 
    foreach ($stateArray as $state){ 
     foreach ($MonthArray as $month){ 
      $result[$state][]=array('month'=>$month, 'count'=>isset($info[strtoupper($state)][$month])?$info[strtoupper($state)][$month]:0); 
     } 
    } 
print_r($result); 

将输出

Array 
(
    [Nj] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 150 
       ) 

      [1] => Array 
       (
        [month] => Dec 2016 
        [count] => 0 
       ) 

      [2] => Array 
       (
        [month] => Jan 2017 
        [count] => 0 
       ) 

     ) 

    [va] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 100 
       ) 

      [1] => Array 
       (
        [month] => Dec 2016 
        [count] => 0 
       ) 

      [2] => Array 
       (
        [month] => Jan 2017 
        [count] => 0 
       ) 

     ) 

    [Ca] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 0 
       ) 

      [1] => Array 
       (
        [month] => Dec 2016 
        [count] => 0 
       ) 

      [2] => Array 
       (
        [month] => Jan 2017 
        [count] => 0 
       ) 

     ) 

    [BS] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 0 
       ) 

      [1] => Array 
       (
        [month] => Dec 2016 
        [count] => 0 
       ) 

      [2] => Array 
       (
        [month] => Jan 2017 
        [count] => 0 
       ) 

     ) 

    [TS] => Array 
     (
      [0] => Array 
       (
        [month] => Nov 2016 
        [count] => 0 
       ) 

      [1] => Array 
       (
        [month] => Dec 2016 
        [count] => 0 
       ) 

      [2] => Array 
       (
        [month] => Jan 2017 
        [count] => 0 
       ) 

     ) 

) 
+0

谢谢АндрейТанечник,这是我想要的。非常感谢你 – bdevloper