2016-10-23 3 views
2

Я пытаюсь создать 2D-массив, где $multiples[$i] = array(multiples of $i), $i = 1,2,3...Пара значений ключа PHP, где ключ - динамическая переменная, а значение - массив?

function getMultiples($factor, $start = 0, 10) 
{ 
    $multiples = array(); 

    for($i = $factor + $start; $i < 10; $i+=$factor) 
    $multiples[] = $i; 

    return $multiples; 
} 

for($i = 2; $i < 10; $i++) 
{ 
    $start = 0 ; 

    $multiples[$i] = getMultiples($i, $start, 10); 
} 

Однако, когда я var_dump

$multiples[2] = array(0 => 2) 
$multiples[3] = array(0 => 3) 
$multiples[4] = array(0 => 4) 
... 

Каждый элемент $values был intialized только с первым кратным в каждом массиве.

Я тестировал это с помощью нечисловых значений ключа, и он отлично работает. Значения статического ключа также работают. Значение динамической клавиши $i похоже на проблему, что здесь происходит?

+0

Я попробовал и хорошо работать, каждый элемент в '$ values' является массив из трех элементов – developer

+0

Хм, вы правы это действительно работает ... но это упрощенная версия моей проблемы, когда она не работает. Так что, может быть, проблема кроется в другом месте! Я собираюсь копаться ... – bagel

ответ

0

Если вы хотите получить кратные числа, вам нужно обновить getMultiples следующим образом:

function getMultiples($factor, $start = 0, $max) 
{ 
    $multiples = array(); 

    for($i = 2; $i < $max; $i++) 
    $multiples[] = $i*$factor; 

    return $multiples; 
} 

Что мы изменяем?

  1. петли 10 или $max время for($i = $factor + $start; $i < 10; $i+=$factor)кfor($i = 2; $i < $max; $i++).
  2. найти несколько $multiples[] = $i;в$multiples[] = $i*$factor;
+0

Оба способа работают, но я думаю, что ваш более аккуратный - я слишком усложняю вещи, как обычно :) Я обнаружил проблему в своем коде - несколько строк вдоль меня использовали 'array_splice' вместо 'array_slice', что приводит к усеченному массиву! – bagel