我需要什么
这是数组结构
$data=$event['data']['pricing_detail'];
[1] => Array
(
[type] => General Public Tickets Adult
[amount] => 50
[comment] => (Working Days)
)
[2] => Array
(
[type] => General Public Tickets Adult
[amount] => 80
[comment] => (Saturday/ Sunday/ Holiday)
)
我需要输出
[1] => Array
(
[type] => General Public Tickets Adult
[metadata]=>array
(
[0] =>array
(
[amount] => 50
[comment] => (Working Days)
)
[1]=>array
(
[amount] => 80
[comment] => (Saturday/ Sunday/ Holiday)
)
)
)
代码段
$data=$event['data']['pricing_detail'];
$metadata = array();
foreach($data as $key => $value)
{
if($value[1]['type'] == $value[2]['type'])
{
$metadata[$key]['amount'] = $value['amount'];
print_r($metadata);
}
else
{
echo "not matched";
}
}
答案 0 :(得分:1)
您也创建了一个新的故障单数组,第一维是类型的内容,第二维是它的原始ID。
这样的事情:
$grouped = array();
foreach($data as $key => $value) {
$grouped[$value['type']][$key] = $value;
unset($grouped[$value['type']][$key]["type"]);
}
print_r($grouped);
根据您的数组结构进行调整,我无法看到您样本中$ data的实际结构。
<小时/> 如果要对多级数组进行排序,可以使用此函数的变体:
/**
* sort an multidimensional array by any of it's fields and return sorted array
* ex.: $sorted = multisort($data, 'volume', SORT_DESC, 'edition', SORT_ASC);
* IMPORTANT: This function uses mutlisort and will reindex numeric keys !
* @param array $data array to sort
* @param string $field name of field to sort by
* @param int $direction SORT_DESC or SORT_ASC constant
* @return array
*/
function multisort(){
$args = func_get_args();
$data = array_shift($args);
foreach ($args as $n => $field) {
if (is_string($field)) {
$tmp = array();
foreach ($data as $key => $row)
$tmp[$key] = $row[$field];
$args[$n] = $tmp;
}
}
$args[] = &$data;
call_user_func_array('array_multisort', $args);
return array_pop($args);
}
像这样使用:
foreach($grouped as $type => &$list)
$list = multisort($list, 'comment', SORT_DESC);
答案 1 :(得分:1)
循环数组,存储它们所属的类型和数组。 然后循环类型并添加te值。
//store types and the arrays the belong to
foreach($data as $k=>$v){
$type[$v['type']][]=$k;
}
//loop types, creating result array
foreach($type as $k=>$v){
$tmp=array(
'type'=>$k,
'metadata'=>array()
);
//loop all the arrays of this type
foreach($v as $w){
//store in TMP
$t=array(
'amount' => $vals[$w]['amount'],
'comment' => $vals[$w]['comment']
);
//sort TMP on EMPTY value
usort($t,function ($a, $b) {
if($a == '' && $b != '') return 1;
if($b == '' && $a != '') return -1;
if($b == 0){return 1;}
return 0;
});
//store
$tmp['metadata'][]=$t;
}
$result[]=$tmp;
}
echo '<pre>'.print_r($result,true).'<pre>';
示例:
$data=array(
1 => Array(
'type' => 'General Public Tickets Adult',
'amount' => 50,
'comment' => '(Working Days)'),
2 => Array (
'type' => 'General Public Tickets Adult',
'amount' => 80,
'comment' => '(Saturday/ Sunday/ Holiday)'),
3 => Array (
'type' => 'Special Tickets Children',
'amount' => 300,
'comment' => '(Saturday/ Sunday/ Holiday)'),
4 => Array (
'type' => 'Special Tickets Children',
'amount' => 10000,
'comment' => '(Monday afternoon)')
);
结果:
Array
(
[0] => Array(
[type] => General Public Tickets Adult
[metadata] => Array(
[0] => Array(
[amount] => 50
[comment] => (Working Days)
)
[1] => Array(
[amount] => 80
[comment] => (Saturday/ Sunday/ Holiday)
)
)
)
[1] => Array(
[type] => Special Tickets Children
[metadata] => Array(
[0] => Array(
[amount] => 300
[comment] => (Saturday/ Sunday/ Holiday)
)
[1] => Array(
[amount] => 10000
[comment] => (Monday afternoon)
)
)
)
)
使用usort
更新了[edit] ,以便对空的“评论”进行排序;
[edit] 在usort
添加了一行,以防止在故障单= 0时不必要的排序;