#php #associative-array
Вопрос:
Я застрял на этом большую часть дня, и у меня нет идей. У меня есть массив, подобный этому:
Array ( [rank] =gt; Array ( [0] =gt; 1 [1] =gt; 2 [2] =gt; 3 ) [name] =gt; Array ( [0] =gt; 'Hideki' [1] =gt; 'Rory' [2] =gt; 'Sam' [money] =gt; Array ( [0] =gt; '$100' [1] =gt; '$200' [2] =gt; '$500' ) )
и у меня есть задача создать массив со следующим форматом из него:
Array ( [Hideki] =gt; Array ( [rank] =gt; 1 [money] =gt; '$100' ) [Rory] =gt; Array ( [rank] =gt; 2 [money] =gt; '$200' [Sam] =gt; Array ( [rank] =gt; 3 [money] =gt; '$500' ) )
Загвоздка в том, что «ранг» и «деньги» должны быть динамическими именами
Комментарии:
1. Итак, прежде чем мы начнем доказывать ответы на ваши домашние задания, вам нужно рассказать нам, что вы пробовали до сих пор. ТАК что это не просто сайт вопросов и ответов, он о том, как научить вас учиться. Расскажите нам, что вы пробовали до сих пор, вместе с фрагментами кода 🙂
2. Я получил ваш комментарий и приношу извинения за причиненные неудобства. У меня буквально нет никаких хороших идей, как это сделать, и мне стыдно делиться тем, что я пробовал до сих пор 🙂
Ответ №1:
Это должно быть так просто:
$new = []; foreach($array['name'] as $key =gt; $name) { $new[$name] = [ 'rank' =gt; $array['rank'][$key], 'money' =gt; $array['money'][$key] ]; }
Комментарии:
1. Большое спасибо! Проблема в том, что «ранг» и «деньги» должны быть динамическими значениями.
Ответ №2:
Немного поздно, но вот моя одежда. Мой подход состоял в том, чтобы использовать функцию array_walk ().
$array = [ 'rank' =gt; [1,2,3], 'name' =gt; ['Hideki', 'Rory', 'Sam'], 'money' =gt; ['$100', '$200', '$500'], ]; $i = 0; $newArray = []; array_walk($array['name'], function($name) use (amp;$i, $array, amp;$newArray) { $newArray[$name] = ['rank'=gt; $array['rank'][$i], 'money' =gt; $array['money'][$i]]; $i ; }); print_r($newArray);
Ответ №3:
Запустите свой первый массив через цикл foreach, ссылаясь только на ключ «имя» и используя пары ключ=gt;значение. Затем ссылайтесь на другие ключи из первого массива при создании нового массива, задавая значение в качестве ключа для второго массива.
Сначала вам нужно будет получить ключи array_keys()
и использовать вложенный foreach для перебора всех ключей.
Пример:
$keys1 = array_keys($array1); foreach ($array1['name'] as $key =gt; $value) { $val2 = array(); foreach ($keys1 as $k){ if ($k != 'name') $val2[$k] = $array1[$k][$key]; } $array2[$value] = $val2; }
Комментарии:
1. Большое спасибо. Мне нужно, чтобы «ранг» и «деньги» были динамичными ценностями.