Change the array KEY to a value from sub array

冷暖自知 提交于 2019-12-10 16:13:31

问题


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.


回答1:


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

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



回答2:


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.




回答3:


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.




回答4:


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.




回答5:


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

$plans contains the associative array.

This is just a simple solution.




回答6:


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


来源:https://stackoverflow.com/questions/2392737/change-the-array-key-to-a-value-from-sub-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!