我想用cakephp(或php)将'flat array'转换为'嵌套数组'
来自:
$results = array(
array('customer' => 'John', 'hotel' => 'Sheraton', 'roomtype' => 'Single'),
array('customer' => 'John', 'hotel' => 'Sheraton', 'roomtype' => 'Double'),
array('customer' => 'John', 'hotel' => 'Sheraton', 'roomtype' => 'Triple'),
array('customer' => 'John', 'hotel' => 'Hilton', 'roomtype' => 'Single'),
array('customer' => 'Doe', 'hotel' => 'Hilton', 'roomtype' => 'Single'),
array('customer' => 'Doe', 'hotel' => 'Hilton', 'roomtype' => 'Double'),
array('customer' => 'Doe', 'hotel' => 'Sheraton', 'roomtype' => 'Single')
);
进入这个:
$results = array(
array(
'customer' => 'Jhon',
'children' => array(
array(
'hotel' => 'Sheraton',
'children' => array(
array('roomtype' => 'Single'),
array('roomtype' => 'Double'),
array('roomtype' => 'Triple')
)
),
array(
'hotel' => 'Hilton',
'children' => array(
array('roomtype' => 'Single')
)
),
)
),
array(
'customer' => 'Doe',
'children' => array(
array(
'hotel' => 'Hilton',
'children' => array(
array('roomtype' => 'Single'),
array('roomtype' => 'Double')
)
),
array(
'hotel' => 'Sheraton',
'children' => array(
array('roomtype' => 'Single')
)
),
)
)
);
我尝试了循环(for,foreach,while)
我也尝试了Set :: nest()cakephp实用程序,但我没有找到解决方案:(
有什么“神奇的解决方案”可以解决这个问题吗?
感谢
答案 0 :(得分:1)
试试这个
$convert = array();
$customer_key = array();
$hotel_key = array();
$index = 0;
foreach ($results as $row) {
if (!isset($customer_key[$row['customer']])) {
$customer_key[$row['customer']] = $index;
$index++;
}
$key = $customer_key[$row['customer']];
$convert[$key]['customer'] = $row['customer'];
if (!isset($hotel_key[$key])) {
$hotel_key[$key][$row['hotel']] = 0;
}
elseif (!isset($hotel_key[$key][$row['hotel']])) {
$hotel_key[$key][$row['hotel']] = count($hotel_key[$key]);
}
$h_key = $hotel_key[$key][$row['hotel']];
$convert[$key]['children'][$h_key]['hotel'] = $row['hotel'];
$convert[$key]['children'][$h_key]['children'][]= array('roomtype' => $row['roomtype']);
}
print_r($convert);
它应该将您给定的数组转换为接受的数组