Объединить три масива в один

414
11 февраля 2017, 10:16

Пытаюсь объединить массивы в один, для обеднения взял функцию array_merge у меня получился массив:

   Array
    (
        [0] => Array
        (
            [order_id] => 17
    [customer_id] => 19
    [firstname] => 
    [lastname] => 
    [email] => 
    [telephone] => 
    [delivery_method] => 1
    [delivery_address] => 
    [region] => 349
    [country] => 18
    [comment] => что то
    [product_name] => Часы
    [model_product] => ВС
    [quantity] => 1
    [total] => 32.0000
    [oll_total] => 32.0000
    [language_id] => 1
    [date_added] => 2017-02-09 12:04:56
    [date_modified] => 2017-02-09 12:04:56
)
        [1] => Array
            (
    [name] => Сумская область
        )
        [2] => Array
            (
    [name] => Верхняя сыроватка
        )

Пытаюсь привести массив к виду

 Array
    (
        [0] => Array
        (
            [order_id] => 17
    [name] =>
    [name] => 
    [customer_id] => 19
    [firstname] => 
    [lastname] => 
    [email] => 
    [telephone] => 
    [delivery_method] => 1
    [delivery_address] => 
    [region] => 349
    [country] => 18
    [comment] => что то
    [product_name] => Часы
    [model_product] => ВС
    [quantity] => 1
    [total] => 32.0000
    [oll_total] => 32.0000
    [language_id] => 1
    [date_added] => 2017-02-09 12:04:56
    [date_modified] => 2017-02-09 12:04:56

делаю перебор по массиву

foreach ($results as $result) {
        $this->data['orders'][] = array(
            'firstname' => $result['firstname'],
            'lastname' => $result['lastname'],
            'email' => $result['email'],
            'telephone' => $result['telephone'],
            'delivery_method' => $result['delivery_method'],
        );
    }

Получаю ошибку Undefined index: firstname и т.д. Подскажите правильно так делать, если нет подскажите как правильно ?

переделал получилось так

      Array
    (
        [0] => Array
        (
            [name] =>
                [telephone] =>
        [email] => 
    [delivery_address] => 
    [comment] => что то
    [product_name] => Часы
    [model_product] => ВС
    [quantity] => 1
        [total] => 32.0000
        [oll_total] => 32.0000
        [date_added] => 2017-02-09 12:04:56
        [name_region] => Сумская область
    [name_city] => Верхняя сыроватка
    )

)

$this->data['orders'] = array(); $orders = $this->model_account_order->getOrder();

    foreach ($orders as $order) {
        $regions = $this->model_account_order->getRegionName();
        foreach ($regions as $region) {
            $citys = $this->model_account_order->getCityName();
            foreach ($citys as $city) {
                $this->data['orders'][] = array(
                    'name' => $order['firstname'] . " " . $order['lastname'],
                    'telephone' => $order['telephone'],
                    'email' => $order['email'],
                    'delivery_address' => $order['delivery_address'],
                    'comment' => $order['comment'],
                    'product_name' => $order['product_name'],
                    'model_product' => $order['model_product'],
                    'quantity' => $order['quantity'],
                    'total' => $order['total'],
                    'oll_total' => $order['oll_total'],
                    'date_added' => $order['date_added'],
                    'name_region' => $region['name_region'],
                    'name_city' => $city['name_city']
                );
            }
        }
    }
Answer 1

Ошибка возникает потому, что во втором и третьем массивах отсутствует индекс firstname. Насколько я понимаю массивы:

    [1] => Array
            (
    [name] => Сумская область
        )
        [2] => Array
            (
    [name] => Верхняя сыроватка
        )

носят смысловую нагрузку, отличную от первого. Я бы в том месте где они определяются просто переопределил бы ключи, а потом в нулевой массив складывал эти элементы. А то по коду получается у вас все те же три массива на выходе, только сложены теперь в $this->data['orders']

Answer 2

Всё предельно просто.
Все необходимые данные у вас уже есть, нужно только построить из них массив нужного формата.
Это можно сделать одним циклом либо, например, с помощью функции array_map.

$this->data['orders'] = array_map(function($row){
  $order = $row[0];
  return array(
    'name' => $order['firstname'] . " " . $order['lastname'],
    'telephone' => $order['telephone'],
    'email' => $order['email'],
    'delivery_address' => $order['delivery_address'],
    'comment' => $order['comment'],
    'product_name' => $order['product_name'],
    'model_product' => $order['model_product'],
    'quantity' => $order['quantity'],
    'total' => $order['total'],
    'oll_total' => $order['oll_total'],
    'date_added' => $order['date_added'],
    'name_region' => $row[1]['name'],
    'name_city' => $row[2]['city'],
  );
}, $results);
READ ALSO
basic аутентификация для одной папки

basic аутентификация для одной папки

Друзья здравствуйте! Вижу что данная тема еще не освещалась на русверсии данного ресурса в таком формате, по этому прошу подключиться к решению...

375
Ошибка при установке laravel

Ошибка при установке laravel

При установке Laravel я получаю "oops< something went wrong" и следтекст ошибки

454
Не работает перенос строки в PHP

Не работает перенос строки в PHP

Вставляю переменную, содержащую текст с символами переноса строки \r\n (просто \n) (пробовал <br/>) с помощью шаблонизатора LightnCandy в блок div — в результате...

426
Почему pdo query select возвращает null?

Почему pdo query select возвращает null?

Есть класс подключения к базе данных:

441