php - 基于对象属性将对象数组拆分为PHP中的新数组
问题描述
如何生成一组对象数组,根据对象属性“名称”对它们进行分组?我可以在 Javascript 中执行此操作,但不确定如何在 PHP 中完成此操作。
这是当前 json_encoded 回显输出的示例片段:
[
{"id":14970,
"amount":"70",
"name":"Food"
},
{"id":14970,
"amount":"100",
"name":"Drink"
},
{"id":14970,
"amount":"100",
"name":"Food"
},
{"id":14970,
"amount":"300",
"name":"Drink"
},
{"id":14970,
"amount":"10",
"name":"Taxi"
},
{"id":14970,
"amount":"200",
"name":"Food"
}
]
这将是所需的输出:
[
[
{"id":14970,
"amount":"70",
"name":"Food"
},
{"id":14970,
"amount":"100",
"name":"Food"
},
{"id":14970,
"amount":"200",
"name":"Food"
}
],
[
{"id":14970,
"amount":"100",
"name":"Drink"
},
{"id":14970,
"amount":"300",
"name":"Drink"
}
],
[
{"id":14970,
"amount":"10",
"name":"Taxi"
}
]
]
如果解决方案得到解释,将非常感激,因为我对 PHP 的了解有限,并且很想了解它是如何工作的,以供将来参考和使用 PHP。
解决方案
<?php
$array = json_decode('[
{"id":14970,
"amount":"70",
"name":"Food"
},
{"id":14970,
"amount":"100",
"name":"Drink"
},
{"id":14970,
"amount":"100",
"name":"Food"
},
{"id":14970,
"amount":"300",
"name":"Drink"
},
{"id":14970,
"amount":"10",
"name":"Taxi"
},
{"id":14970,
"amount":"200",
"name":"Food"
}
]',true);
$types = [];
$splited = [];
foreach($array as $key => $value){
// searching types for the type
if(in_array($value['name'],$types)){
// adding it to splited with the correct key if type exists
$splited[array_search($value['name'],$types)][] = $value;
} else {
// creating a new type if not exists
$types[] = $value['name'];
$splited[] = [$value];
}
}
echo '<pre>';
var_dump($splited);
echo '</pre>';
?>
推荐阅读
- vue.js - Vue JS:无法从创建的函数更新 dom
- linux - 从 Bash 脚本中执行 CMake
- asp.net - asp.net web api:仅在 sql 连接期间发生 HTTP 500 错误:本地主机当前无法处理请求
- mongodb - Kafka Mongodb 接收器连接器 - 更新文档
- aem - 如何使用 Sightly(HTL) 访问字符串数组
- ios - 基于位于 SwiftUI 中该视图内的 GeometryReader 设置视图框架
- html - 如何在图像上绘制 svg?
- python - 更新 a 中的文本
HTML 中的标签,其中包含使用 Beautifulsoup的标签
- mysql - 在 MySQL 中选择最后一个重复行
- android - Android Kotlin:没有为 EditText 触发 onTextChanged