首页 > 解决方案 > 基于对象属性将对象数组拆分为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。

标签: phparraysobjectsplit

解决方案


<?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>';
?>

推荐阅读