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

From: Date: Thu, 18 Feb 2021 17:27:05 +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-232267@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: php at yopmail 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 guess you even meant: Expected result: ---------------- array(4) { [1]=> int(1) [2]=> int(4) [3]=> int(9) ["four"]=> int(16) } (i.e. keep all keys, even numeric) and I agree with you! (and a quick Web search shows we're not alone...) --- @requinix: I see at least 2 ways: 1. Add a bool $preserve_keys = false parameter (like array_slice) that would at least enable us to use array_column($items, "id", null, true) 2. Change the default behavior (consistent with array_map) and just use array_values(array_column($items, "id")) if you really want to lose the keys PS: see also Request #66435 Previous Comments: ------------------------------------------------------------------------ [2016-12-14 15:30:55] 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. ------------------------------------------------------------------------ [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

« previous php.bugs (#232267) next »