|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #73735 array_column keys should be preserved
Submitted: 2016-12-13 21:27 UTC Modified: 2016-12-14 03:23 UTC
From: photon0 at gmail dot com Assigned:
Status: Open Package: Arrays related
PHP Version: Next Minor Version OS: ANY
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2016-12-13 21:27 UTC] photon0 at gmail dot com
It would increase the usability of this function if it could preserve the array's keys in the result.
I was expecting this to be the default behaviour.

best regards,
David Lévêsque

Test script:
$items = array(
    1 => ["id" => 1],
    2 => ["id" => 4],
    3 => ["id" => 9],
    "four" => ["id" => 16]


Expected result:
array(4) { [0]=> int(1) [1]=> int(4) [2]=> int(9) ["four"]=> int(16) }

Actual result:
array(4) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) }


Add a Patch

Pull Requests

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2016-12-14 03:23 UTC]
As default behavior it makes sense, but it should be possible to explicitly invoke the behavior using arguments and I'm not sure how the change could be squeezed into the function. NULL as the $index_key?

Anyway, the workaround is trivial:
  array_combine(array_keys($items), array_column($items, "id"))
 [2016-12-14 15:30 UTC] photon0 at gmail dot com
I always saw PHP's arrays as a Swiss army knife for data manipulation. If you say this would be difficult to implement or would result in less than optimal performance I refer entirely to your judgment.
The only disadvantage I see to the workaround is the performance. Calling 3 functions is clearly slower than using just one.

That said, your point is valid and this request was just a suggestion.
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Tue Oct 20 01:01:23 2020 UTC