2015-08-14 2 views
0

Я получаю значения для своей карты флота через ajax.Заполнение массива отсутствующими значениями после этого

В сценарии бэкэнда мой тестовый массив выглядит следующим образом:

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. Создает 24 элемента массив $hours, содержащий подмассивы, содержащие значения по умолчанию [0, 0]
  2. Re-клавиши ваш $data, вытаскивая и используя это первое значение для каждой подматрицы. Предполагается, что вы используете 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 - посмотрите на [PHP-реализацию array_column()] (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; 
    } 
Смежные вопросы