Конвертировать PHP "сгруппированный" массив в "сегментированный" массив - PullRequest
2 голосов
/ 20 декабря 2011

Попытка преобразовать «сгруппированный» многомерный массив в «сегментированный» многомерный массив. Не уверен, как это объяснить, так что надеюсь, эти print_r результаты объяснят лучше.

Текущий массив

Array
(
    [qty] => Array
        (
            [0] => 1
            [1] => 1
            [2] => 1
        )

    [item_id] => Array
        (
            [0] => RR332
            [1] => FF586
            [2] => QW865
        )

    [item_name] => Array
        (
            [0] => Widget 1
            [1] => Widget 2
            [2] => Widget 3
        )

    [price] => Array
        (
            [0] => 1.00
            [1] => 1.50
            [2] => 1.50
        )

)

Требуемый массив

Array
(
    [0] => Array
        (
            [qty] => 1
            [item_id] => RR332
            [item_name] => Widget 1
            [price] => 1.00
        )

    [1] => Array
        (
            [qty] => 1
            [item_id] => FF586
            [item_name] => Widget 2
            [price] => 1.50
        )

    [2] => Array
        (
            [qty] => 1
            [item_id] => QW865
            [item_name] => Widget 3
            [price] => 1.50
        )

)

Кажется, это должно быть простым заданием, но я пока не смог его взломать.

Я бы предпочел перебрать Current Array , чтобы создать Wanted Array , если это возможно.

Любая помощь очень ценится!

Спасибо.

Ответы [ 4 ]

4 голосов
/ 20 декабря 2011

Вы имеете в виду это?:

$data = array(
  'qty' => array(
    0 => 1,
    1 => 1,
    2 => 1,
  ),
  'item_id' => array(
    0 => 'RR332',
    1 => 'FF586',
    2 => 'QW865',
  ),
  'item_name' => array(
    0 => 'Widget 1',
    1 => 'Widget 2',
    2 => 'Widget 3',
  ),
  'price' => array(
    0 => '1.00',
    1 => '1.50',
    2 => '1.50',
  ),
);

$result = array();
foreach($data as $key => $values)
{
    foreach($values as $number => $value)
        $result[$number][$key] = $value;
}

print_r($result);

Выход:

Array
(
    [0] => Array
        (
            [qty] => 1
            [item_id] => RR332
            [item_name] => Widget 1
            [price] => 1.00
        )

    [1] => Array
        (
            [qty] => 1
            [item_id] => FF586
            [item_name] => Widget 2
            [price] => 1.50
        )

    [2] => Array
        (
            [qty] => 1
            [item_id] => QW865
            [item_name] => Widget 3
            [price] => 1.50
        )

)
3 голосов
/ 20 декабря 2011

Я думаю, что это сработает для вас, хотя у меня нет хорошего набора данных для тестирования.

$wanted_array = array();
// Iterate over the outer array to get the text keys & inner arrays
foreach ($current_array as $txtkey=>$arr) {
  // Iterate over each inner array to get the numeric key
  foreach ($arr as $numkey=>$val) {
    // Set a numeric key pointing to a new array 
    // onto the new outer array if it isn't already there
    if (!isset($wanted_array[$numkey])) $wanted_array[$numkey] = array();

    // Swap the keys of the outer and inner arrays.
    $wanted_array[$numkey][$txtkey] = $val;
  }
}

Обновление: использование тестового массива из ответа @ hakre, вот онопрактика:

$current_array = array(
  'qty' => array(
    0 => 1,
    1 => 1,
    2 => 1
  ),
  'item_id' => array(
    0 => 'RR332',
    1 => 'FF586',
    2 => 'QW865'
  ),
  'item_name' => array(
    0 => 'Widget 1',
    1 => 'Widget 2',
    2 => 'Widget 3'
  ),
  'price' => array(
    0 => '1.00',
    1 => '1.50',
    2 => '1.50'
  )
);
// Output:
Array
(
    [0] => Array
        (
            [qty] => 1
            [item_id] => RR332
            [item_name] => Widget 1
            [price] => 1.00
        )

    [1] => Array
        (
            [qty] => 1
            [item_id] => FF586
            [item_name] => Widget 2
            [price] => 1.50
        )

    [2] => Array
        (
            [qty] => 1
            [item_id] => QW865
            [item_name] => Widget 3
            [price] => 1.50
        )

)
1 голос
/ 20 декабря 2011

Как вы сказали, просто пройдите по нему, чтобы построить.

$wanted = array();
foreach($current['item_id'] as $key => $value) {
    $wanted[$key] = array(
        'qty' = $current['qty'][$key],
        'item_id' = $current['item_id'][$key],
        'item_name' = $current['item_name'][$key],
        'price' = $current['price'][$key]
    );
}

print_r($wanted);
0 голосов
/ 20 декабря 2011

Вы можете перебрать исходный массив, используя цикл foreach, который дает ключ $ и значение $ для каждого элемента в вашем массиве.Оттуда создайте свой новый массив, как вам нравится.

$array2 = array();
foreach ($array1 as $key => $value)
{
  $array2[] = array('key' => 'value');
}
...