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

时间:2010-03-06 14:19:31

标签: php arrays hashtable

这是我的数据库

的结果集
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[value_of_id]

谢谢。

7 个答案:

答案 0 :(得分:6)

这不会就地执行,但是:

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

答案 1 :(得分: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 :(得分:2)

看到你用来组装$ plan的代码会有所帮助,但我会假设它是这样的

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

您可以在从数据库中提取数据时分配显式值,如下所示:

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

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

答案 3 :(得分:0)

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

$plans包含关联数组。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

这可能有点晚了,但是我一直在寻找解决同一问题的方法。但是由于所有其他答案都涉及循环,而且恕我直言太复杂了,所以我一直在自己尝试一些东西。

结果

root, dirs, files = next(os.walk(my_dir, topdown=True))
files = [ os.path.join(root, f) for f in files ]
print(files)

就这么简单。

答案 6 :(得分:0)

在我看来,没有比使用array_column()第二个参数的null更简单或更富有表现力的技术了。 null参数通知函数保留每个子数组中的所有元素,新的第一级键从array_column()的第三参数中指定的列中派生。

代码:(Demo

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

注意:此技术也通常用于确保所有子数组在父数组中都包含唯一值。发生这种情况是因为数组可能不包含相同级别的重复键。因此,如果在使用array_column()时出现重复值,则先前的子数组将被以后每次出现的相同值覆盖,以用作新键。

Demonstration of "data loss" due to new key collision.