所以下面的代码主要用于生成与我相同的数组,该数组是通过我无法控制的其他过程生成的,因此无法直接编辑。
我需要做的是更改在第二层阵列上输出的密钥 在第3个数组上带有'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>
我为每个循环都尝试了一些,但是它们产生了一些奇怪的输出,并且我试图通过array_push在2cnd层数组中传递值,但是只有错误。
$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);
答案 0 :(得分:1)
有一个功能:
$result = array_column($array, null, 'uid');
如果要循环播放或使用旧的PHP版本:
foreach($array as $v) {
$result[$v['uid']] = $v;
}
答案 1 :(得分:0)
最优雅的解决方案是减少使用费用:
<?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
将以初始值(在我们的情况下为空数组)开始,然后为每个元素调用具有两个元素的回调:第一个是累加器,第二个是当前项。累加器用我们的初始值(空数组)初始化,然后与每个连续的调用一起传递。因此,在完成修改后,返回$acc
很重要。
然后最终在您要进行的转换中使用当前元素的uid
键通过索引将当前元素放入累加器:$acc[$cur['uid']] = $cur;