我有一个包含以下内容的表:
TICKET | VOLUME | REFF
------------------------
111111 | 1 |
111112 | 0.5 | 111111
111113 | 2 |
111114 | 1 | 111112
111115 | 4 | 111114
111116 | 2 | 111113
111117 | 1 | 111116
and so on..
我想要显示的结果(数组格式)是:
[
[ 'TICKET' => 111112, 'VOLUME' => 0.5 ],
[ 'TICKET' => 111114, 'VOLUME' => 1 ],
[ 'TICKET' => 111115, 'VOLUME' => 4 ]
]
所以,所有的答案都是为了让票号为父母。 11111。 怎么做?
非常感谢!
到目前为止我尝试了什么:
$parent_ticket = 111111;
$res = [];
$cek = DB::table('data_ticket')->where('ticket', $parent_ticket)->first();
if($cek){
$cek_child1 = DB::table('data_ticket')->where('ticket', $cek->REFF)->first();
if($cek_child1){
$res[] = [ 'TICKET' => $cek_child1->TICKET, 'VOLUME' => $cek_child1->VOLUME ];
$cek_child2 = DB::table('data_ticket')->where('ticket', $cek_child1->REFF)->first();
if($cek_child2){
$res[] = [ 'TICKET' => $cek_child2->TICKET, 'VOLUME' => $cek_child2->VOLUME ];
$cek_child3 = DB::table('data_ticket')->where('ticket', $cek_child2->REFF)->first();
if($cek_child3){
// and so on....
}
}
}
}
答案 0 :(得分:1)
你应该使用递归,这是你想做的最简单的方法。
<?php
$parent_ticket = 111111;
$res = [];
$cek = DB::table('data_ticket')->where('ticket', $parent_ticket)->first();
if ($cek) {
findAllTicketsAndReferences($cek, $res);
}
function findAllTicketsAndReferences($cek, array &$res)
{
$cek_child1 = DB::table('data_ticket')->where('ticket', $cek->REF)->first();
if (!$cek_child1) {
return false;
}
$res[] = ['TICKET' => $cek_child1->TICKET, 'VOLUME' => $cek_child1->VOLUME];
findAllTicketsAndReferences($cek_child1, $res);
}
这应该有用,想法是在没有孩子的时候返回false,否则它会继续并改变数据数组。