PHP слияние массивов - PullRequest
       1

PHP слияние массивов

0 голосов
/ 31 января 2010

В многомерном массиве ниже я хотел бы объединить массивы с одинаковым merge_id. Я не уверен, что "слияние" является правильным словом: в приведенном ниже примере массив ['0'] должен стать массивом ['0'] с массивом ['0'] ['0'] и массивом [' 0 '] [' 1 '], последний равен массиву [' 1 ']. Я надеюсь, что это имеет смысл ...

Массив выводится из базы данных, отсортированной по merge_id, поэтому массивы с совпадающим merge_id всегда «рядом» друг с другом, и всегда будет только 2 с одинаковым merge_id

Когда я перебираю массив, я знаю, что мне нужно сохранить переменную, которая всегда равна предыдущему merge_id, и если есть совпадение между предыдущим и текущим, то объединить.

Array
(
    [0] => Array
        (
            [client_id] => 5
            [company_name] => company111_name
            [id] => 3
            [fee] => 111
            [year] => 2009
            [quarter] => 3
            [date_inserted] => 1264948583
            [description] => 2009 - Q3


            [fee_type] => 
            [merge_id] => a87ff679a2f3e71d9181a67b7542122c
            [total_paid] => 0
            [total_remainder] => 0
        )

    [1] => Array
        (
            [client_id] => 5
            [company_name] => company111_name
            [id] => 6
            [fee] => 55.5
            [year] => 2010
            [quarter] => 2
            [date_inserted] => 1264949470
            [description] => 2010 - Q2


            [fee_type] => 
            [merge_id] => a87ff679a2f3e71d9181a67b7542122c
            [total_paid] => 0
            [total_remainder] => 0
        )

    [2] => Array
        (
            [client_id] => 5
            [company_name] => company111_name
            [id] => 4
            [fee] => 111
            [year] => 2009
            [quarter] => 4
            [date_inserted] => 1264948583
            [description] => 2009 - Q4


            [fee_type] => 
            [merge_id] => 
            [total_paid] => 0
            [total_remainder] => 0
        )



    [3] => Array
        (
            [client_id] => 5
            [company_name] => company111_name
            [id] => 7
            [fee] => 55.5
            [year] => 2010
            [quarter] => 3
            [date_inserted] => 1264949470
            [description] => 2010 - Q3


            [fee_type] => 
            [merge_id] => 
            [total_paid] => 0
            [total_remainder] => 0
        )

)

код

$merger = $data['search']['0']['merge_id'];
            $i = 0;
            foreach($data['search'] as $fee)
            {
                if($fee['merge_id'] == $merger)
                {
                    //bump up & merge arrays
                    ???
                }           

                $merger = $fee['merge_id'];
                $i++;
            }

Ответы [ 2 ]

4 голосов
/ 31 января 2010

Вы можете использовать идентификатор в качестве ключа, чтобы поместить все элементы с одинаковым идентификатором в один и тот же массив:

$merged = array();
foreach ($data['search'] as $fee) {
    if ($fee['merge_id'] == '') {
        continue;
    }
    if (!isset($merged[$fee['merge_id']])) {
        $merged[$fee['merge_id']] = array();
    }
    $merged[$fee['merge_id']][] = $fee;
}
$merged = array_values($merged);

Обратите внимание, что при этом элементы будут пропущены с пустым идентификатором слияния. В этом случае вы также можете использовать идентификатор слияния по умолчанию, заменив continue; на $fee['merge_id'] = 0;.

1 голос
/ 31 января 2010
  foreach($array as $p)
      $result[$p['merge_id']][] = $p;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...