按字段拆分/分组数组元素


Split/group array elements by field

对于一个游戏,我有一组"房子",每个房子都属于一个"城市"。我想根据这个城市来分离这个集合(它是一个数组(,这样每个城市都会有自己的房子数组。我没有发现内置的数组函数可以做到这一点(比如array_split进行回调(,那么我该怎么做呢?

我曾想过对数组的每个元素进行迭代,但这似乎非常非常慢。房子已经全部按城市id排序了,所以如果我得到城市id变化的确切位置,我可能会使用一些拆分函数。

阵列中的房屋存储方式如下:

array(3) {
    ["id"]=> string(1) "1",
    ["name"]=> string(13) "Example House",
    ["city_id"]=> string(1) "1",
}

城市只是代表它们的一个数字,而不是另一个物体。

我预计结果会是这样的:

array(n) {
    [1]=> array(o) {
        ["id"]=> string(1) "1",
        ["name"]=> string(13) "Example House",
    }, ...
}

这样做正确吗?有什么内置函数或更好的算法吗?

在不循环的情况下处理结构非常困难。也许你可以这样简化它。。

$new_arr = array();
foreach($arr as $arr1)
{
    $new_arr[$arr1['id']] = array_slice($arr1,1);
}
print_r($new_arr);

演示

尽管这可以使用数组函数实现,但与foreach 相比,性能不会那么好