2017-02-22 75 views
1

У меня есть массив, созданный из запроса базы данных, который имеет все данные, необходимые для выполнения новой функции, createList(), просто не в структура, которая удобна. В настоящее время мне интересно, стоит ли восстанавливать данные в этом массиве или просто делать новый запрос к базе данных. В процессе этого я пытаюсь создать простейшие средства для восстановления данных из исходного массива в новый массив, подходящий для функции createList().Определить другое/новое значение для тех же ключей в массиве while в цикле foreach

Исходный массив в виде:

$original =  [0] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'branch' 
        'cgorder' => 0 
        'csorder' => 0 
        ) 
       [1] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'stick' 
        'cgorder' => 0 
        'csorder' => 1 
        ) 
       [2] => (
        'cgtitle' => 'tree' 
        'cstitle' => 'leaf' 
        'cgorder' => 0 
        'csorder' => 2 
        ) 
       [3] => (
        'cgtitle' => 'car' 
        'cstitle' => 'wheel' 
        'cgorder' => 1 
        'csorder' => 0 
        ) 
       [4] => (
        'cgtitle' => 'car' 
        'cstitle' => 'bumper' 
        'cgorder' => 1 
        'csorder' => 2 
        ) 
       etc. 

и мне нужен массив, аналогичный форме:

$new =   ['tree'] => (
        'branch', 
        'stick', 
        'leaf' 
        ) 
       ['car'] => (
        'wheel', 
        'bumper' 
        ) 
       etc. 

На данный момент я не могу видеть способ сделать некоторые умные вложенные циклы. Моя лучшая попытка состояла в том, чтобы запустить цикл foreach на $ original, чтобы создать новый массив ($ cgArray) значений cgtitle. Я бег второго цикла Еогеаспа на $ оригинального и поместите cstitle внутри ключа $ cgArray, что соответствует это двойникам cgtitle значения. Заказ сохраняется от $ оригинал.

Есть ли лучший способ, чем выполнение двух различных итераций foreach на $ original? Например, как функция в цикле foreach, чтобы отметить, что указанный ключ (cgtitle) изменился с последней итерации, и я могу затем начать строить новый массив в одном цикле?

Например:

foreach ($original as $key => $value) { 
    if ([$_SESSION['cOrdered'][$key]['cgtitle'] is different from valye of last loop) { 
     $new[[$_SESSION['cOrdered'][$key]['cgtitle'] = array(); 
    } else { 
     array_push($new[[$_SESSION['cOrdered'][$key]['cgtitle'], $new[[$_SESSION['cOrdered'][$key]['cstitle']); 
    } 
) 

ответ

1

Я думаю, что это будет работать.

$groups = []; 
foreach ($original as $value) { 
    $groups[$value['cgtitle']][] = $value['cstitle']; 
) 

var_dump($groups); 
+0

Ну, я чувствую себя немного глупо, забывая о таком простом решении. Большое спасибо @Yada, это сработало отлично. – biscuitstack