2015-07-28 83 views
1

在我有以下的數組:的值相同量的每一個的PHP陣列

Array 
(
[0] => Array 
    (
     [data] => Array 
      (
       [0] => 2015-07-21 
       [1] => 2015-07-22 
       [2] => 2015-07-23 
       [3] => 2015-07-24 
      ) 

    ) 

[1] => Array 
    (
     [name] => 3389 Remote Desktop 
     [data] => Array 
      (
       [2015-07-21] => 37 
       [2015-07-22] => 21 
       [2015-07-23] => 38 
       [2015-07-24] => 14 
      ) 

    ) 

[2] => Array 
    (
     [name] => 80 HTTP 
     [data] => Array 
      (
       [2015-07-21] => 22 
       [2015-07-22] => 2 
            // <- here is missing [2015-07-23] => 0 
            // <- here is missing [2015-07-24] => 0 
      ) 

    ) 

[4] => Array 
    (
     [name] => 21 FTP 
     [data] => Array 
      (
            // <- here is missing [2015-07-21] => 0           
       [2015-07-22] => 1 
       [2015-07-23] => 20 
            // <- here is missing [2015-07-24] => 0 
      ) 

    ) 

) 

可以實現什麼功能,所述缺少的元素被添加?我沿着線至今的東西:

$newarray = array(); 
$count = count($arr[0][data]); 
foreach($arr as $key => $subarr) { 
    for ($i = 1; $i <= $count; $i++) { 
     if (in_array($i, $subarr)) $newarray[$key][$i - 1] = $i; 
     else $newarray[$key][$i - 1] = 0; 
    } 
} 

其中工程部分,並給出:

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

[3389 Remote Desktop] => Array 
    (
     [0] => 0 
     [1] => 0 
     [2] => 0 
     [3] => 0 
    ) 

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

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

,但我需要有完全相同的結構作爲初始陣列。任何幫助歡迎。

回答

1
$res = [$array[0]]; 
// make default array with all zeros 
$default = array_combine($array[0]['data'], array_fill(0,count($array[0]['data']),0)); 
// make new array changing default values with present 

for($i = 1; $i < count($array); $i++) 
    $res[] = ['name' => $array[$i]['name'], 
      'data' => array_replace($default, $array[$i]['data'])]; 

print_r($res); 
+0

這個工作很好,但有一個缺陷:陣列的新結構與最初的結構不一樣。 – domi771

+0

@ domi771我已更新答案 – splash58

+0

這是完美的工作!非常感謝! – domi771

0

如果你一直定義第一個元素的所有日期,那麼你可以做這樣的:

$data = array(); // your array 
$allDates = $data[0]['data']; 
for($i=1; $i<count($data); $i++) 
{ 
    foreach($allDates as $reqDate) 
    { 
     if(!array_key_exists($reqDate, $data[$]['data']) 
     { 
      $data[$]['data'][$reqDate] = 0; 
     } 
    } 
} 
+0

謝謝!是的,日期總是在第一個元素上定義。我得到你的代碼到目前爲止還有一個錯誤的$ data [$] ['data']))。你確定它的$ data [$]而不是$ data [$ i]?這兩個我的更正這個作品完美的 – domi771

+0

。剩下的問題是帶有0值的插入日期的順序不正確。 – domi771

相關問題