gpt4 book ai didi

PHP 重复循环,直到没有匹配的记录

转载 作者:行者123 更新时间:2023-11-29 10:41:45 32 4
gpt4 key购买 nike

我有一张表,其中包含:

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....
}

}
}
}

最佳答案

您应该使用递归,这是完成您想要的操作的最简单方法。

<?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,否则它会继续并更改数据数组。

关于PHP 重复循环,直到没有匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45343920/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com