Таким образом, приведенный ниже код в основном предназначен для создания того же массива, который у меня есть. Этот массив создается с помощью какого-то другого процесса, который я не могу контролировать, поэтому прямое редактирование невозможно.
Что мне нужно сделать, так это изменить ключ, который выводится в массиве второго уровня. Массив с «uid» в третьем массиве. Ниже у меня есть визуальное изображение того, как это выглядит сейчас и что мне нужно, чтобы это было.
<pre>
(
[0] => Array
(
[uid] => 155
[amount] => 45
)
[1] => Array
(
[uid] => 156
[amount] => 45
)
[2] => Array
(
[uid] => 157
[amount] => 45
)
[3] => Array
(
[uid] => 158
[amount] => 45
)
[4] => Array
(
[uid] => 159
[amount] => 45
)
[5] => Array
(
[uid] => 160
[amount] => 45
)
)
Desired Output
Array
(
[155] => Array
(
[uid] => 155
[amount] => 45
)
[156] => Array
(
[uid] => 156
[amount] => 45
)
[157] => Array
(
[uid] => 157
[amount] => 45
)
[158] => Array
(
[uid] => 158
[amount] => 45
)
[159] => Array
(
[uid] => 159
[amount] => 45
)
[160] => Array
(
[uid] => 160
[amount] => 45
)
)
</pre>
Я пробовал несколько циклов для каждого, но они генерировали какой-то странный вывод, и я пытался передать значение во время массива 2cnd через array_push, но получил только ошибки.
$p_array = array(
$alpha = array('uid' => 155,'amount' => 45),
$alpha = array('uid' => 156,'amount' => 45),
$alpha = array('uid' => 157,'amount' => 45),
$alpha = array('uid' => 158,'amount' => 45),
$alpha = array('uid' => 159,'amount' => 45),
$alpha = array('uid' => 160,'amount' => 45)
);
print_r($p_array);
Для этого есть функция:
$result = array_column($array, null, 'uid');
Если вы хотите зациклиться или у вас старая версия PHP:
foreach($array as $v) {
$result[$v['uid']] = $v;
}
Самым элегантным решением было бы использовать сокращение:
<?php
$p_array = array(
$alpha = array('uid' => 155,'amount' => 45),
$alpha = array('uid' => 156,'amount' => 45),
$alpha = array('uid' => 157,'amount' => 45),
$alpha = array('uid' => 158,'amount' => 45),
$alpha = array('uid' => 159,'amount' => 45),
$alpha = array('uid' => 160,'amount' => 45)
);
$result = array_reduce(
$p_array,
function($acc, $cur) {
$acc[$cur['uid']] = $cur;
return $acc;
},
array()
);
print_r($result);
array_reduce
начнется с начального значения (которое в нашем случае является пустым массивом), а затем для каждого элемента вызовет обратный вызов с двумя элементами: 1-й аккумулятор и 2-й текущий элемент. Аккумулятор инициализируется нашим начальным значением (пустым массивом), а затем передается вместе с каждым последующим вызовом. Следовательно, важно вернуть $acc
после того, как вы его изменили.
Затем, чтобы, наконец, выполнить преобразование, которое вы просите, поместите текущий элемент в аккумулятор с индексом, используя клавишу uid
текущего элемента: $acc[$cur['uid']] = $cur;
Спасибо! Я проверю это, чтобы увидеть, работает ли это лучше! Я очень ценю помощь!
Так что этот код предназначен только для создания массива, $alpha используется в качестве заполнителя. Идея состоит в том, чтобы просто создать массив, с которым я работаю, но фактический код является конфиденциальной информацией, поэтому код, который генерирует массив, не будет редактироваться, мне просто нужно манипулировать массивом $ p_array