将数组的键更改为子数组中的值

9
这是我的数据库中的结果集。
print_r($plan);
Array
(
    [0] => Array
        (
            [id] => 2
            [subscr_unit] => D
            [subscr_period] => 
            [subscr_fee] => 
        )

    [1] => Array
        (
            [id] => 3
            [subscr_unit] => M,Y
            [subscr_period] => 1,1
            [subscr_fee] => 90,1000
        )

    [2] => Array
        (
            [id] => 32
            [subscr_unit] => M,Y
            [subscr_period] => 1,1
            [subscr_fee] => 150,1500
        )

)

我该如何将$plan[0]更改为$plan[id的值]

谢谢。


根据您查询结果的方式,您可以在那里更改数组,但我们需要看到您的代码。 - Anthony Forloney
更多明确的 [mcve] 相关页面:https://dev59.com/ilDTa4cB1Zd3GeqPI2dK - mickmackusa
7个回答

8
这个操作不会直接在原处进行,但是:
$new_plan = array();
foreach ($plan as $item)
{
  $new_plan[$item['id']] = $item;
}

5
这可能有点晚了,但我一直在寻找解决相同问题的方法。但由于其他所有答案都涉及循环并且在我的观点中太过复杂,因此我一直在尝试着自己解决。

结果

$items = array_combine(array_column($items, 'id'), $items);

就是这么简单。

6
可以使用array_column($items, null, "id");来实现。 - miken32

3

您还可以使用array_reduce,通常用于缩小数组。也就是说,它可以通过简单地返回与输入数组中相同的项目但具有所需键来实现您想要的数组格式。

// Note: Uses anonymous function syntax only available as of PHP 5.3.0
//       Could use create_function() or callback to a named function
$plan = array_reduce($plan, function($reduced, $current) {
    $reduced[$current['id']] = $current;
    return $reduced;
});

请注意,如果上面的段落没有说明清楚,那么本方法对于您在问题中概述的个人要求来说可能过于复杂。然而,对于想要在数组中做更多事情而不仅仅是改变键的读者来说,这种方法可能会有用。

2

我希望看到您用来组装$plan的代码,但我会假设它类似于这样

while ($line = $RES->fetch_assoc()) {
    $plan[] = $line;
}

您可以在从数据库中提取数据时直接指定一个明确的值,例如:

while ($line = $RES->fetch_assoc()) {
    $plan[$line['id']] = $line;
}

假设$RES是您的数据库查询结果集。

2

在我看来,使用array_column()函数并将第二个参数设为null是最简单和最具表现力的技术之一。这个null参数告诉函数保留每个子数组中的所有元素,新的第一层键从array_column()的第三个参数所指定的列派生而来。

代码: (演示)

$plan = array_column($plan, null, 'id');

注意:这种技术通常用于确保所有子数组在父数组中包含唯一值。这是因为数组在同一级别上不能包含重复的键。因此,如果在使用array_column()时出现重复值,则先前的子数组将被每个后续出现的相同值覆盖,以用作新键。 演示“数据丢失”由于新键冲突。

0
$plans = array();
foreach($plan as $item)
{
    $plans[$item['id']] = $item;
}

$plans 包含关联数组。

这只是一个简单的解决方案。


0
$newplan = array();
foreach($plan as $value) {
    $id = $value["id"];
    unset($value["id"]);
    $newplan[$id] = $value;
}

这个答案缺少教育性的解释。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接