Как преобразовать массив с несколькими полями со значениями, разделенными запятыми, в новый массив на основе индекса? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть массив со значениями, разделенными запятыми, как показано ниже:

array:5 [
  "manufacturer" => "BB"
  "width" => "245,225, ..."
  "height" => "45,65, ..."
  "diameter" => "19,17, ..."
  "type" => "AA"
]

Нет ограничений на значения, разделенные запятыми, но все 3 из них будут иметь одинаковую длину.

Из этого I хотите получить вывод, как показано ниже:

[
    245,
    45,
    19,
],
[
    45,
    65,
    17
]

До сих пор я пробовал следующий код.

$mandatoryFields = [
    'width',
    'height',
    'diameter',
];

    $finalArray = [];
    for ($i = 0; $i < 2; $i+=1) {
        foreach ($mandatoryFields as $mandatoryField) {
            $fieldArray = explode(',', $executionArray[$mandatoryField]);
            $finalArray[] = [
                $fieldArray[$i]
            ];
        }
    }
    dd($finalArray);

Но он возвращает мне

    array:6 [
  0 => array:1 [
    0 => "245"
  ]
  1 => array:1 [
    0 => "45"
  ]
  2 => array:1 [
    0 => "19"
  ]
  3 => array:1 [
    0 => "225"
  ]
  4 => array:1 [
    0 => "65"
  ]
  5 => array:1 [
    0 => "17"
  ]
]

1 Ответ

1 голос
/ 19 июня 2020

Следующий лог c может помочь вам решить вашу проблему:

<code><?php
$arr = [
   "manufacturer" => "BB",
   "width" => "245, 225",
   "height" => "45, 65",
   "diameter" => "19, 17",
   "type" => "AA",
];

foreach ($arr as $key => $val) {
    $split[$key] = explode(',', $val);
}

$mandatoryFields = [
    'width',
    'height',
    'diameter',
];
// keep only mandatory fields
$split = array_intersect_key($split, array_flip($mandatoryFields));

$items = count($split[$mandatoryFields[0]]); // number of 'items' per mandatory field
for ($i = 0; $i < $items; $i++) {
    $result[$i] = array_column($split, $i);
}

echo '<pre>';
print_r($result);
echo '
';

Вывод:

Array
(
    [0] => Array
        (
            [0] => 245
            [1] => 45
            [2] => 19
        )

    [1] => Array
        (
            [0] =>  225
            [1] =>  65
            [2] =>  17
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...