php - 在 php 中是否有类似 array_column 的函数用于多维数组
问题描述
是否有类似于array_column
多维数组的功能?是否有一个函数可以将下面的第一个数组转换为第二个:
Array
(
[0] => Array
(
[foodType] => fruits
[itemID] => 1
[itemName] => apple
)
[1] => Array
(
[foodType] => fruits
[itemID] => 2
[itemName] => banana
)
[2] => Array
(
[foodType] => veggies
[itemID] => 3
[itemName] => carrot
)
[3] => Array
(
[foodType] => veggies
[itemID] => 4
[itemName] => broccoli
)
)
结果数组:
Array
(
[fruits] => Array
(
[0] => Array
(
[itemID] => 1
[itemName] => apple
)
[1] => Array
(
[itemID] => 2
[itemName] => banana
)
)
[veggies] => Array
(
[0] => Array
(
[itemID] => 3
[itemName] => carrot
)
[1] => Array
(
[itemID] => 4
[itemName] => broccoli
)
)
)
解决方案
不,虽然您可以制作自己的函数,只使用array_column
获取类型/列,然后循环遍历您的数组,但没有一个函数可以在本机上获得您的预期输出,以匹配删除该项目以不重复迭代。
就像是:
<?php
$data = [
['foodType' => 'fruits', 'itemID' => 1, 'itemName' => 'apple'],
['foodType' => 'fruits', 'itemID' => 2, 'itemName' => 'banana'],
['foodType' => 'veggies', 'itemID' => 3, 'itemName' => 'carrot'],
['foodType' => 'veggies', 'itemID' => 4, 'itemName' => 'broccoli']
];
function array_column_multi ($array, $column) {
$types = array_unique(array_column($array, $column));
$return = [];
foreach ($types as $type) {
foreach ($array as $key => $value) {
if ($type === $value[$column]) {
unset($value[$column]);
$return[$type][] = $value;
unset($array[$key]);
}
}
}
return $return;
}
print_r(array_column_multi($data, 'foodType'));
结果:
Array
(
[fruits] => Array
(
[0] => Array
(
[itemID] => 1
[itemName] => apple
)
[1] => Array
(
[itemID] => 2
[itemName] => banana
)
)
[veggies] => Array
(
[0] => Array
(
[itemID] => 3
[itemName] => carrot
)
[1] => Array
(
[itemID] => 4
[itemName] => broccoli
)
)
)
推荐阅读
- php - 使用 PHP 登录后使用异步内容抓取网站
- python - AttributeError:'function'对象没有属性'read'
- node.js - 无法从我的 VS Code 扩展 (node.js) 连接到 SQL Server
- c++ - 错误 2552:无法使用初始化列表初始化非聚合
- python - 如何使大小为 [64, 3, 128, 128] 和 [64, 64, 127, 127] 的两个张量的维度相等
- python - 字典的长度不一样
- python - zero-mq如何获取队列容量和负载
- java - java.lang.NoClassDefFoundError: com/codename1/ui/ComponentSelector
- visual-studio-code - VSCode:用en-和em破折号替换多个连字符
- node.js - Deploy Nodejs + ReactJs to Heroku