PHP: создать двумерный массив из многомерного массива со значением в качестве ключа

Я пытаюсь создать новый массив из сложного массива.
Если нет простого решения, каждый совет поможет найти более успешный поиск.

У меня есть этот сложный массив (много сокращен) и хочу построить новый 2-мерный массив:

array (
[key1] => value1
[key2] => value2
[category] => array (
[key3] => value3
[key4] => array (
[small] => value6
[large] => value7
)
[items] => array (
[0] => array (
[aTag] => #PU2RRL
[name] => 3PL
[position] => 25
[versions] => array (
[0] => array (
[bTag] => #KF67RL
[color] => blue
[id] => 001
)
[1] => array (
[bTag] => #Z8TR4
[color] => red
[id] => 002
)
)
)
[1] => array (
...

Это массив, который я хочу создать:

array(
[001] => array (
[aTag] => #PU2RRL
[name] => 3PL
[position] => 25
[bTag] => #KF67RL
[color] => blue
)
[002] => array (
[aTag] => #PU2RRL
[name] => 3PL
[position] => 25
[bTag] => #Z8TR4
[color] => blue))

С ID в качестве ключа, и это значения:

$itemAll = array(
$array[category][items][0][versions][0][id]  => array(
"aTag" => $array[category][items][0][aTag],
"name" =>  $array[category][items][0][name],
"position" =>  $array[category][items][0][position],
"bTag" => $array[category][items][0][versions][0][bTag],
"color" => $array[category][items][0][versions][0][color],
)
);

Я понятия не имею, как создать этот массив с циклами foreach для «элементов» и версий с идентификатором в качестве первичного ключа, какие-либо подсказки?


РЕДАКТИРОВАТЬ: огромное спасибо @DeeDuu! Поскольку у меня было несколько элементов, я добавил еще один foreach:

$new_array = array();
// i have multiple items, so I removed [0]:
$items = $array["category"]["items"];
// added another foreach
foreach ($items as $item) {
// changed $items to $item
$shared_properties = array(
"aTag" => $item["aTag"],
"name" => $item["name"],
"position" => $item["position"]
);
// changed $items to $item
foreach ($item["versions"] as $version) {
$specific_properties = array(
"bTag" => $version["bTag"],
"color" => $version["color"]
);
$new_entry = array_merge(
$shared_properties,
$specific_properties
);
$new_array[$version["id"]] = $new_entry;  }}

0

Решение

Если я правильно понимаю, что вы хотите, что-то вроде следующего должно работать.

 // This is the target array where we will save the recombinated data
$new_array = array();

// Store the relevant subarray in a new variable;
// This makes the subsequent code shorter
$items = $array["category"]["items"][0];

// This gives the data that will be common to all the new entries,
// for all versions seem to share aTag, name and position
$shared_properties = array(
"aTag" => $items["aTag"],
"name" => $items["name"],
"position" => $items["position"]
);

// Alright, let's loop over the versions
foreach ($items["versions"] as $version) {
// Another array for the data that is specific
// to the version we're currently looking at
$specific_properties = array(
"bTag" => $version["bTag"],
"color" => $version["color"]
);

// The new entry is a combination of the shared and the
// specific properties; array_merge will do that for us
$new_entry = array_merge(
$shared_properties,
$specific_properties
);

// Now add to the new array
$new_array[$version["id"]] = $new_entry;
}
0

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

Других решений пока нет …

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