Объедините значения массива в ключах другого массива в Stack Overflow

У меня есть конкретные проблемы, у меня есть 2 массива:

Одна, которая извлекает определенные поля из данных заказа, выполняет итерацию и извлечение идентификатора, названия, суммы и цены столько раз, сколько товаров находится в текущем заказе, поэтому выглядит это так:

$array1 = array( 'id_1' => '2975', 'title_1' => 'first_title', 'amount_1' => '1', 'price_1' => 55, 'id_2' => '2973', 'title_2' => 'second_title', 'amount_2' => '1', 'price_2' => 95, )

Есть 2 товара в заказе, если бы их было 3, был бы другой набор значений, поэтому у меня есть другой массив, в который я хотел бы отобразить значения, он должен быть точно в этой форме (он переносится на другой веб-сайт, поэтому он получает данные только в этой форме):

$products = Array(

Array
(
'id' => 'first_id',
'title' => 'first_title',
'amount' => 'first_amount',
'price' =>  'first_price',
'type' => 0,
'installmenttype' => 0
),

Array
(
'id' => 'second_id',
'title' => 'second_title',
'amount' => 'second_amount',
'price' =>  'second_price',
'type' => 0,
'installmenttype' => 0
)

);

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

Я просмотрел этот вопрос:
создать многомерный массив с помощью цикла foreach

Но не мог добраться до цели, так как должен выглядеть код, который достигает этого?

0

Решение

Определите ключи, которые вы хотите в выходном массиве.

$keys = ['id', 'title', 'amount', 'price', 'type', 'installmenttype'];

Тогда карта array_combine более 4-х частей вашего исходного массива.

$products = array_map(function($product) use ($keys) {
return array_combine($keys, array_merge($product, [0,0]));
}, array_chunk($array1, 4));

(array_merge добавляет нулевые значения для дополнительных ключей, чтобы array_combine может быть использован.)

0

Другие решения

<?php
$array1 = array( 'id_1' => '2975', 'title_1' => 'first_title', 'amount_1' => '1', 'price_1' => 55, 'id_2' => '2973', 'title_2' => 'second_title', 'amount_2' => '1', 'price_2' => 95, );
$products = [];
if (!empty($array1)) {
foreach ($array1 as $key => $val) {
list($property,$id) = explode('_',$key);
$id--; // make it zero based
if (!isset($products[$id])) $products[$id] = [];
$products[$id][$property] = $val;
}
}

print_r($products);

в результате чего

Array
(
[0] => Array
(
[id] => 2975
[title] => first_title
[amount] => 1
[price] => 55
)

[1] => Array
(
[id] => 2973
[title] => second_title
[amount] => 1
[price] => 95
)

)
0

Вы можете использовать ряд нативных функций:

$new    =   array_map(function($v) {
foreach($v as $key => $value) {
unset($v[$key]);
$key        =   preg_replace('/\_[0-9]{1,}/','',$key);
$v[$key]    =   $value;
}
return $v;
},array_chunk($array1,4,true));print_R($new);

Дает тебе:

Array
(
[0] => Array
(
[id] => 2975
[title] => first_title
[amount] => 1
[price] => 55
)

[1] => Array
(
[id] => 2973
[title] => second_title
[amount] => 1
[price] => 95
)

)
0

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

$array1 = array('id_0' => '2975', 'title_0' => 'first_title', 'amount_0' => '1', 'price_0' => 55, 'id_1' => '2975', 'title_1' => 'first_title', 'amount_1' => '1', 'price_1' => 55, 'id_2' => '2973', 'title_2' => 'second_title', 'amount_2' => '1', 'price_2' => 95, );

$res =array();
While(count($array1)){
$res[] = array_splice($array1, 0,4);
}
Var_dump($res);

https://3v4l.org/7Gt5k

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector