Req #73735 [Com]: array_column keys should be preserved

From: Date: Wed, 14 Dec 2016 15:30:56 +0000
Subject: Req #73735 [Com]: array_column keys should be preserved
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-205985@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73735&edit=1

 ID:                 73735
 Comment by:         photon0 at gmail dot com
 Reported by:        photon0 at gmail dot com
 Summary:            array_column keys should be preserved
 Status:             Open
 Type:               Feature/Change Request
 Package:            Arrays related
 Operating System:   ANY
 PHP Version:        Next Minor Version
 Block user comment: N
 Private report:     N

 New Comment:

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.


Previous Comments:
------------------------------------------------------------------------
[2016-12-14 03:23:59] requinix@php.net

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-13 21:27:05] photon0 at gmail dot com

Description:
------------
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]
);

var_dump(array_column($items,"id"));

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


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=73735&edit=1


Thread (4 messages)

« previous php.bugs (#205985) next »