Проблема с конкретной задачей с использованием ассоциативных массивов в PHP

#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. Большое спасибо. Мне нужно, чтобы «ранг» и «деньги» были динамичными ценностями.