按列值对多维数组数据进行分组

问题描述 投票:0回答:2
$Show = [];
foreach ($result_radio as $Station => $Show) {
    $Show [] = array($result_radio[$Station]['StationID'] => $Show);
}

var_dump($Show)
//输出

array(19771) { // Number of Shows accross 182 Station
    [0] => array(1) {
        [24315] => array(16) {
            ["StationID"]=>"24315"
            ["Show"]=> "JaazOnline"
            ["Genre"]=> "Jazz"
            ...
    [1] => array(1) {
        [24315] => array(16) {
            ["StationID"] => "24315"
            ["Show"] => "Jaaz24/7"
            ["Genre"]=> "Jazz"
            ...
    [2] => array(1) {
        [24315] => array(16) {
            ["StationID"] => "24315"
            ["Show"] => "JazzUsa"
            ["Genre"] => "Jazz"
            ...
    [3] => array(1) {
        [66995] => array(16) {
            ["StationID"] => "66995"
            ["Show"] => "StateofTrance"
            ["Genre"] => "Electronic"
            ...
    [4] => array(1) {
        [66995] => array(16) {
            ["StationID"] => "66995"
            ["Show"] => "ElectroHouse"
            ["Genre"]=> "Electronic"
            ...

这将返回 19771 个广播节目的数组,其中

$key
是有关此特定节目的 StationID 和值
$Show
相关信息。

这就是我想要的,但我想以一种方式格式化我的数组,而不是为每个 StationID 以及属于该 ID 的所有节目只有一个数组。

例如

array(182) {  // 182 Radio Stations
    [24315] =>  array(50) {  //Shows classified by Station Id
        array(16) { ["StationID"]=>"24315" ["Show"]=> "JaazOnline" ["Genre"]=> "Jazz" ...
        array(16) { ["StationID"]=>"24315" ["Show"]=> "Jaaz24/7" ["Genre"]=> "Jazz" ..
        array(16) { ["StationID"]=>"24315" ["Show"]=> "JazzUsa" ["Genre"]=> "Jazz" ...
    [66995]=>  array(32) { 
        array(16) {["StationID"]=>"66995" ["Show"]=> "StateofTrance" ["Genre"]=> "Electronic" 
        array(16) {["StationID"]=>"66995" ["Show"]=> "ElectroHouse" ["Genre"]=> "Electronic"

为什么?
因为我认为客户端以这种方式访问对象属性会让我的生活更轻松。请帮助格式化这个节目数组,以便在所有节目中都有一个索引代表站 ID...

php arrays multidimensional-array grouping sub-array
2个回答
1
投票

这个怎么样:

$Show = array();
foreach ($result_radio as $Station => $Show){
$Show [$result_radio[$Station]['StationID']][] = $Show; } 

它应该完全符合您的要求。


1
投票

你也可以编写一个函数,如:

function _group_by($array, $key) {
    $return = array();
    foreach($array as $val) {
        $return[$val[$key]][] = $val;
    }
    return $return;
}
© www.soinside.com 2019 - 2024. All rights reserved.