[英]PHP Group Array Children under Parent?
我有一個返回以下內容的數組:
$products = [
'product' => [
[
"product_parent" => "Parent Name 1",
"product_name" => "Product 1",
],
[
"product_parent" => "Parent Name 1",
"product_name" => "Product 2",
],
[
"product_parent" => "Parent Name 2",
"product_name" => "Product 1",
],
[
"product_parent" => "Parent Name 3",
"product_name" => "Product 1",
]
]
];
我需要返回一個像這樣結構的新數組,它是(關聯)數組的(索引)數組
'product' => [
0 => [
'product_name' => 'Parent Name 1'
'product_info' => [
0 => [
"product_name" => "Product 1",
],
1 => [
"product_name" => "Product 2",
]
]
],
1 => [
'product_name' => 'Parent Name 2'
'product_info' => [
0 => [
"product_name" => "Product 1",
],
1 => [
"product_name" => "Product 2",
]
]
]
]
我已經嘗試了各種 foreach 循環,但我無法找到一種方法來像我上面的所需輸出那樣正確設置索引。
我試過的:
我最初也在研究這種方法,它更有效,因為它執行的查詢更少並提高了性能。 希望這對將來的人有所幫助。
$variables = [];
foreach($query_results as $key => $group) {
$sub_groups = $this->db->select('*')
->from('products')
->where('parent_id', $group['id'])
->get();
$variables[0]['product'][$key]['product_group'] = $group['product_name'];
$variables[0]['product'][$key]['product_info'] = array_values($sub_groups->result_array());
}
這將返回我上面想要的數組結構類型,但具有更好的性能。
您可以使用array_reduce
來實現這一點。
$products = array(
'product' => array(
array(
"product_parent" => "Parent Name 1",
"product_name" => "Product 1",
),
array(
"product_parent" => "Parent Name 1",
"product_name" => "Product 2",
),
array(
"product_parent" => "Parent Name 2",
"product_name" => "Product 1",
),
array(
"product_parent" => "Parent Name 3",
"product_name" => "Product 1",
)
)
);
//
$result = array_reduce($products['product'], function($c, $v){
if ( !isset( $c[ $v['product_parent'] ] ) ) $c[ $v['product_parent'] ] = array( 'product_name' => $v[ "product_parent" ], 'product_info' => array() );
$c[ $v['product_parent'] ]["product_info"][] = array( "product_name" => $v[ "product_name" ] );
return $c;
}, array());
//Constructing the final array
$result = array( 'product' => array_values( $result ) );
echo "<pre>";
print_r( $result );
echo "</pre>";
這將導致:
Array
(
[product] => Array
(
[0] => Array
(
[product_name] => Parent Name 1
[product_info] => Array
(
[0] => Array
(
[product_name] => Product 1
)
[1] => Array
(
[product_name] => Product 2
)
)
)
[1] => Array
(
[product_name] => Parent Name 2
[product_info] => Array
(
[0] => Array
(
[product_name] => Product 1
)
)
)
[2] => Array
(
[product_name] => Parent Name 3
[product_info] => Array
(
[0] => Array
(
[product_name] => Product 1
)
)
)
)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.