我有一个 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
我想将此转换为一个非常简单的数组,其中来自“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)
对我来说性能非常重要,因为外部数组有几千个项目。PHP中有快速方法吗?我唯一得到的是一个简单的迭代,但这似乎对我而言太慢了:
// works but I am looking for a faster version
$myNewArray = array();
foreach ($myExistingArray as $item) {
$myNewArray [$item["key1"]."_".$item["key1"]]=$item["count"];
}
编辑/ 根本问题
有些人指出,我的当前解决方案已经是O(n)了,并提到PHP中没有内置函数可以加速这个过程。
我从mysql数据库查询中获得“myExistingArray”。我基本上有工作对象,并希望按照它们的状态和事件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
我希望重新排列键值,以便稍后可以轻松访问具有特定状态的某个事件的工作计数。
SELECT CONCAT(key1,'_',key2) as key,count [...]
然后在php foreach中取消设置当前行以获得内存 :) - Bobot