2014-01-09 4 views
0

Я не знаю, почему у меня возникают проблемы с этим, но я надеюсь, что кто-то может помочь.Динамический индекс массива в PHP

Я хочу динамически добавлять несколько индексов в массив. Например, если у меня есть список идентификаторов.

$ids = array(1247, 1248); 

Как это сделать динамически, в зависимости от количества идентификаторов, находящихся в массиве?

$history['transactions'][$id1][$id2]['Thursday'] = 0; 
+1

Не знаю, что вы спрашиваете –

+3

Что вы хотите, чтобы получившийся массив выглядел? Это не имеет смысла динамически создавать _depth_ в вашем массиве с существенно неизвестными ключами (что и делает ваша попытка). –

+0

массивы динамические в 'PHP', которые вы можете добавить к ним, как хотите. Они фактически являются хеш-таблицами – crush

ответ

2

Если я правильно вас не понимаю, тогда ваш код должен работать. если вы не пытаетесь использовать созданный массив, посмотрите. Я думаю, что простое изменение может решить вашу проблему

это будет работать:

$ids = array(1247, 1248); 
$history['transactions'][$ids[0]][$ids[1]]['Thursday'] = 0; 

Так бы это:

$id1 = 1247; 
$id2 = 1248; 
$history['transactions'][$id1][$id2]['Thursday'] = 0; 

Судя по ней, вы просто ничего не звонит. но не больше вашего кода не может быть больше помощи


Как Дедал указывает, на данный момент код не очень динамичный, (я предположил, что вы просто нужно snipit в середине, чтобы помочь с уже динамическим кодом, но теперь я буду считать обратное), вот пример того, как это изменить:

сказать, что у вас был массив $ids = array(1247, 1248, 1249, 1250, 1251);, вам нужно было бы пройти через их много и разобраться с ними индивидуально. Вероятно, самым простым способом было бы это сделать:

$ids = array(1247, 1248, 1249, 1250, 1251); 
foreach($ids as $id){ 
    $history['transactions'][$id]['Thursday'] = 0; 
} 

Имеют смысл?


Третья попытка: Получение лучшего понимания, что происходит. (Извините, потребовалось много времени, чтобы получить его через мой толстый череп)

Так что, если вы хотите массив со всеми идентификаторами в порядке массива $ids = array(1247, 1248, 1249, 1250, 1251);, то это решение для Вас:

$ids = array(1247, 1248, 1249, 1250, 1251); 
$result = array('Thursday' => 0); 
for($i = count($ids) -1; $i >= 0; $i--){ 
    $result = array($ids[$i] => $result); 
} 
$history = array('transactions' => $result); 

var_dump($history) выходы:

array(1) { 
    ["transactions"]=> 
    array(1) { 
    [1247]=> 
    array(1) { 
     [1248]=> 
     array(1) { 
     [1249]=> 
     array(1) { 
      [1250]=> 
      array(1) { 
      [1251]=> 
      array(1) { 
       ["Thursday"]=> 
       int(0) 
      } 
      } 
     } 
     } 
    } 
    } 
} 

, который теперь, что я верю, что вы ищете

+0

Это не динамический. '$ ids' может быть любого размера. – Daedalus

+0

Да, я понимаю, что это было неправильно ... посмотрел на него после публикации. Разве это не будет динамически зависеть от остальной части кода? – bobkingof12vs

+0

Динамика - это возможность создавать глубину массива в соответствии с длиной массива '$ ids', причем каждый подматрица имеет ключ требуемого идентификатора. Вопрос, который задает пользователь, заключается в том, как создать массив динамически .. ранее отмеченным способом. Это то, что спрашивает ОП. – Daedalus

0

Я думаю, что если бы вы объяснить лучше, что ваш proble м, мы могли бы помочь в лучшей стороне, что объяснить вам, как создавать массивы, как это:

$history['transactions'][$id1][$id2]['Thursday'] = 0; 

в зависимости от того, сколько ид есть в массиве. Конечно, вы можете делать то, что хотите, лучше.

Или просто попробуйте подумать иначе, чем положить идентификаторы в качестве параметров массива.

+0

Ответы зарезервированы для попыток ответить на вопрос. Это не делает попыток ответить на вопрос. – Daedalus

0

Вы можете использовать ссылки для достижения этого очень динамично, но я не понимаю причину этого ...

$ids = array(1247, 1248); 
$data = &$history['transactions']; 
foreach ($ids as $id) { 
    $data = &$data[$id]; 
} 
$data['Thursday'] = 0; 
Смежные вопросы