Pas*_*ein 7 php arrays multidimensional-array
我在PHP中有一个多维数组,其中外部数组包含数千个项目,其中每个项目都是一个数组本身,其值为"key1","key2"和"count":
myExistingArray (size=99999 VERY BIG)
public 0 =>
array (size=3)
'key1' => string '15504'
'key2' => string '20'
'count' => string '1'
public 1 =>
array (size=3)
'key1' => string '15508' (length=5)
'key2' => string '20' (length=2)
'count' => string '2' (length=1)
public 2 =>
array (size=3)
'key1' => string '15510' (length=5)
'key2' => string '20' (length=2)
'count' => string '5' (length=1)
....many more similar items
Run Code Online (Sandbox Code Playgroud)
我想将它转换为一个非常简单的数组,其中来自"key1"和"key"的前值被连接成一个新的键,指向相应的"count"值,如下所示:
myNewArray (size=99999 VERY BIG)
<key1>_<key2> => <count>
15504_20 => string '1' (length=1)
15508_20 => string '2' (length=1)
15510_20 => string '5' (length=1)
Run Code Online (Sandbox Code Playgroud)
性能对我来说非常重要,因为外部数组有几千个项目.PHP中有快速方法吗?我得到的唯一的东西是一个简单的迭代,但这对我来说似乎很慢:
// works but I am looking for a faster version
$myNewArray = array();
foreach ($myExistingArray as $item) {
$myNewArray [$item["key1"]."_".$item["key1"]]=$item["count"];
}
Run Code Online (Sandbox Code Playgroud)
编辑/基础问题
有些人正确地补充说我当前的解决方案已经在O(n)中并且提到PHP中没有内置函数来加速这个.
我从mysql数据库查询中获取"myExistingArray".我基本上有工作对象,并希望按状态和event_id对它们进行分组.查询与此类似:
select count(job.id) as count, job.status as key1, job.event_id as key2
from job
group by job.status, job.event_id
Run Code Online (Sandbox Code Playgroud)
我想重新排列密钥,以便以后我可以轻松访问具有特定状态的特定事件的作业计数.
通常,您会寻找在 PHP 中转换数组的函数array_walk或可能的函数array_map,但不幸的是,它们都不能更改您要转换的数组的键。array_walk将保留密钥,但不会更改它们。遗憾的是,不,没有内置函数可以完成您所要求的操作。