Массив в массиве в массиве - PullRequest
0 голосов
/ 23 марта 2012

Я немного борюсь с ассоциативными массивами в ассоциативных массивах.Дело в том, что мне всегда нужно углубляться в массив, и я просто не понимаю это правильно.

$array['sections']['items'][] = array (
      'ident'         =>  $item->attributes()->ident,
      'type'          =>  $questionType,
      'title'         =>  $item->attributes()->title,
      'objective'     =>  (string) $item->objectives->material->mattext,
      'question'      =>  (string) $item->presentation->material->mattext,
      'possibilities' =>  array (
          // is this even neccesary to tell an empty array will come here??
          //(string) $item->presentation->response_lid->render_choice->flow_label->response_label->attributes()->ident => (string) $item->presentation->response_lid->render_choice->flow_label->response_label->material->mattext
      )
);

foreach ($item->presentation->response_lid->render_choice->children() as $flow_label) {
    $array['sections']['items']['possibilities'][] = array (
        (string) $flow_label->response_label->attributes()->ident => (string) $flow_label->response_label->material->mattext
    );
}

Так что 'abilities '=> array () содержит массив иесли я добавлю значение, как показано в комментарии, я получу то, что мне нужно.Но массив содержит несколько значений, поэтому я пытаюсь поместить несколько значений в позицию $ array ['section'] ['items'] ['abilities '] []

Но этовыводит, что значения хранятся на другом уровне.

...
[items] => Array
   (
      [0] => Array
         (
            [ident] => SimpleXMLElement Object
               (
                  [0] => QTIEDIT:SCQ:1000015312
               )
            [type] => SCQ
            ...
            [possibilities] => Array
               (
               )
         )

      [possibilities] => Array
         (
            [0] => Array
               (
                  [1000015317] => 500 bytes
               )
            [1] => Array 
               ...

То, что я пытаюсь достичь, с помощью моего кода foreach, приведенного выше, - это первый [возможенИ, конечно же, второе исчезнет.

Ответы [ 4 ]

1 голос
/ 23 марта 2012

Ваш $array['sections']['items'] является массивом элементов, поэтому вам нужно указать, к какому элементу добавить возможности:

$array['sections']['items'][$i]['possibilities'][]

Где $ i - это счетчик в вашем цикле.

0 голосов
/ 16 ноября 2018

$array['sections']['items'] - это массив элементов, и, как вы заполняете клавишу possibilities, каждый элемент будет иметь свой собственный possibilities.Итак, чтобы получить доступ к possibilities элемента, который зацикливается, вам нужно указать, какой из $array['sections']['items'], передав индекс, как объяснено в первом ответе. ИЛИ Чтобы упростить ситуацию, вы можете попробовать

  1. Сохранить массив элементов (RHS для первой =) в отдельной переменной вместо определения и добавления косновной массив одновременно.

  2. Установить возможности этой переменной.

  3. Добавить эту переменную к основному $array['sections']['items']

0 голосов
/ 16 ноября 2018

У меня есть:

array[{IsChecked: true, SEC: 0, STP: 0},
      {IsChecked: ture ,SEC: 0, STP: 1},
      {IsChecked: false, SEC: 1 ,STP: 0}] 

Как получить каждый SEC, где значение IsCheked равно true?

0 голосов
/ 23 марта 2012

Прямо сейчас вы добавляете массивы к [items].Но вы хотите добавить их к дочернему элементу [items]:

Вы делаете:

$array['sections']['items']['possibilities'][] = ...

Но это должно быть что-то вроде:

$array['sections']['items'][0]['possibilities'][] = ...
...