Как отсортировать несколько массивов полей формы в php?

У меня есть массив из представления формы:

Array
(
 [form_key] => 9juTLit5qQbaBb98
 [sku] => Array
 (
 [0] => AC25
 [1] => AC30
 [2] => AC31
 )
 [product] => Array
 (
 [0] => 95
 [1] => 100
 [2] => 101
 )
 [related_product] => Array
 (
 [0] => 
 [1] => 
 [2] => 
 )
 [qty] => Array
 (
 [0] => 2
 [1] => 2
 [2] => 2
 )
)

Есть ли способ отсортировать его больше?

Array
(
 [form_key] => 9juTLit5qQbaBb98
 [0] => Array
 (
 [sku] => AC25
 [product] => 95
 [qty] => 2
 )
 [1] => Array
 (
 [sku] => AC30
 [product] => 100
 [qty] => 2
 )
 [2] => Array
 (
 [sku] => AC31
 [product] => 101
 [qty] => 2
 )
)
4 ответа

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

Массив будет находиться в $_POST['data'], который удобен для цикла, поскольку он изолирован от form_key, submit и т.д....


Выберите одно поле для перебора, затем возьмите значения из других полей:

foreach($data['sku'] as $key=>$sku){
 $product = $data['product'][$key];
 $related_product = $data['related_product'][$key];
 $qty = $data['qty'][$key];
}

Затем вы можете создать новый массив или сделать что-либо со значениями.

$newArray[] = array(
 'sku' => $sku,
 'product' => $product,
 'related_product' => $related_product,
 'qty' => $qty
);


Довольно простой пример, но он должен работать с более сложным набором данных

$rs = [];
foreach($_POST as $k1=>$elem) {
 if(is_array($elem)) {
 foreach($elem as $k2=>$value) {
 $rs[$k2][$k1] = $value;
 } 
 }
}


$newArray = [];
 foreach ($array as $mainKey => $value ) {
 foreach($value as $subKey => $subValue) {
 $newArray[$subKey][$mainKey] = $subValue;
 }
 }
 print_r($newArray);

licensed under cc by-sa 3.0 with attribution.