2015-08-14 73 views
0

我通过ajax获取我的flot图的值。之后填充缺失值的数组

在后端脚本我的测试阵列看起来像这样:

Array 
(
    [0] => Array 
     (
      [0] => 6 
      [1] => 1 
     ) 

    [1] => Array 
     (
      [0] => 7 
      [1] => 7 
     ) 

    [2] => Array 
     (
      [0] => 8 
      [1] => 37 
     ) 

    [3] => Array 
     (
      [0] => 9 
      [1] => 44 
     ) 
) 

值与偏移[0]表示的小时。 现在我每小时需要24个数组对象。如何在不触及给定元素的情况下保持这一点?

例如

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

    [6] => Array 
     (
      [0] => 6 
      [1] => 1 
     ) 
    [...] 
    [7] => Array 
     (
      [0] => 7 
      [1] => 7 
     ) 

    [8] => Array 
     (
      [0] => 8 
      [1] => 37 
     ) 

    [9] => Array 
     (
      [0] => 9 
      [1] => 44 
     ) 

在此先感谢。

+0

那么,每个子阵列中的第一个元素是小时?你是否用SQL查询拉出这些数据?可能效率更高一些 - 例如你正在使用PDO,你可以用很多功能来改变结果集,比如'$ stmt-> fetchAll(PDO :: FETCH_FUNC,function($ a,$ b ){/ * ... * /});' –

回答

0

解决方案对我来说:

while ($stmt->fetch()) { 
    $x = $hour; 
    $y = $zugriffe; 
    $data1[$x] = array ($x, $y); 
} 

for ($i=0;$i<=24;$i++){ 
    if (!isset($data1[$i])){ 
     $data1[$i] = array ($i,0); 
    } 
} 
sort($data1); 
0

假设数组的名称为$一个,你可以这样做:

for($i = 0; $i < 24; $i++) { 
    if(isset($a[$i])) continue; 
    else { 
     $a[$i] = array($i,"something you like here"); 
    } 
} 
0

你要根据第一子阵列值“重新键”这个结果集,然后将其合并到一个数组24小时元素。

尝试这种情况:

$data = [ 
    [6, 1], 
    [7, 7], 
    [8, 37], 
    [9, 44] 
]; 

$hours = array_fill(0, 25, [0, 0]); 
$data = array_combine(array_column($data, 0), $data); 
$hours = array_replace($hours, $data); 

print_r($hours); 

此:

  1. 创建包含包含默认值[0, 0]
  2. 重新键您$data,拉出并使用子阵列24元件阵列$hours每个子数组的第一个值就是这样做的。这假定你正在使用PHP 5.5。
  3. 最后,更换改良$data$hours

这产生了:

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

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

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

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

    [4] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [5] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [6] => Array 
     (
      [0] => 6 
      [1] => 1 
     ) 

    [7] => Array 
     (
      [0] => 7 
      [1] => 7 
     ) 

    [8] => Array 
     (
      [0] => 8 
      [1] => 37 
     ) 

    [9] => Array 
     (
      [0] => 9 
      [1] => 44 
     ) 

    [10] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [11] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [12] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [13] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [14] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [15] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [16] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [17] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [18] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [19] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [20] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [21] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [22] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

    [23] => Array 
     (
      [0] => 0 
      [1] => 0 
     ) 

) 

希望这有助于:)

+0

如果您没有使用PHP 5.5,请查看[array_column()]的PHP实现(https://github.com/ramsey/array_column/blob/ master/src/array_column.php)H/T到@AbraCadaver –

0

你可以试试还有这个:

// yours test array 
    $times = array(
     array(6,1), 
     array(7,7), 
     array(8,37), 
     array(9,44) 
    ); 

    // array with all hours 
    $fullTimes = array_fill(0, 24, array(0,0)); 

    foreach ($times as $time) { 
     $fullTimes[$time[0]] = $time; 
    }