Change the array KEY to a value from sub array

2019-06-28 03:22发布

This is the set of result from my database

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
        )

)

How can I change the $plan[0] to $plan[value_of_id]

Thank You.

6条回答
forever°为你锁心
2楼-- · 2019-06-28 04:02
$newplan = array();
foreach($plan as $value) {
    $id = $value["id"];
    unset($value["id"]);
    $newplan[$id] = $value;
}
查看更多
冷血范
3楼-- · 2019-06-28 04:04

This won't do it in-place, but:

$new_plan = array();
foreach ($plan as $item)
{
  $new_plan[$item['id']] = $item;
}
查看更多
何必那么认真
4楼-- · 2019-06-28 04:06

Seeing the code you used to assemble $plan would be helpful, but I'm going assume it was something like this

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

You can simply assign an explicit value while pulling the data from your database, like this:

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

This is assuming $RES is the result set from your database query.

查看更多
来,给爷笑一个
5楼-- · 2019-06-28 04:06

This may be a bit late but I've been looking for a solution to the same problem. But since all of the other answers involve loops and are too complicated imho, I've been trying some stuff myself.

The outcome

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

It's as simple as that.

查看更多
冷血范
6楼-- · 2019-06-28 04:06
$plans = array();
foreach($plan as $item)
{
    $plans[$item['id']] = $item;
}

$plans contains the associative array.

This is just a simple solution.

查看更多
淡お忘
7楼-- · 2019-06-28 04:25

You could also use array_reduce which is generally used for, well, reducing an array. That said it can be used to achieve an array format like you want by simple returning the same items as in the input array but with the required keys.

// 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;
});

Note however, if the paragraph above did not make it clear, this approach is overkill for your individual requirements as outlined in the question. It might prove useful however to readers looking to do a little more with the array than simply changing the keys.

查看更多
登录 后发表回答