之后填充缺少值的数组

时间:2015-08-14 10:52:34

标签: php arrays

我通过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个数组对象。如何在不触及给定元素的情况下保持这一点?

e.g。

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
        )

提前致谢。

4 个答案:

答案 0 :(得分:0)

假设数组的名称是$ a,你可以这样做:

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

答案 1 :(得分:0)

你想&#34;重新键入&#34;此结果根据第一个子数组值设置,然后将其合并为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. 创建包含默认值$hours的子数组的24元素数组[0, 0]
  2. 重新键入$data,拉出并使用每个子阵列的第一个值来执行此操作。这假设您使用的是PHP 5.5。
  3. 最后,将修改后的$data替换为$hours
  4. 这会产生:

    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
            )
    
    )
    

    希望这会有所帮助:)

答案 2 :(得分: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);

答案 3 :(得分: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;
    }