更改具有子数组值3的父键

时间:2019-05-30 17:04:05

标签: php

所以下面的代码主要用于生成与我相同的数组,该数组是通过我无法控制的其他过程生成的,因此无法直接编辑。

我需要做的是更改在第二层阵列上输出的密钥 在第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);

2 个答案:

答案 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;