Php 从in_数组语句中获取值
我有一个数组,其中填充了查询结果,如下所示:Php 从in_数组语句中获取值,php,mysql,arrays,Php,Mysql,Arrays,我有一个数组,其中填充了查询结果,如下所示: $ticket[] = array( 'ticket_id' => $row->ticket_id, 'user_id' => $row->user_id, 'raffle_ticket_num' => $row->raffle_ticket_num ); 现在,在一个while循环中,如果变量$number等于'raffle\u ticket\u num',我将签入$tickets中的
$ticket[] = array(
'ticket_id' => $row->ticket_id,
'user_id' => $row->user_id,
'raffle_ticket_num' => $row->raffle_ticket_num
);
现在,在一个while循环中,如果变量$number等于'raffle\u ticket\u num',我将签入$tickets中的所有数组。我使用以下代码(来自@Fuzzy Tree)完成此操作:
$ticket\u num=1;
而($ticket_num如果您需要打印匹配的用户id
和ticket_id
,则使用foreach
逐个检查每张票据,当您看到具有匹配的#的票据时,您可以打印其他详细信息
foreach($tickets as $ticket) {
if($ticket['raffle_ticket_num'] == $number) {
print 'In array';
print $ticket['user_id'];
print $ticket['ticket_id'];
//break; //uncomment if you just want one
}
}
第1版
foreach
参见@FuzzyTree的答案
第2版
array\u过滤器
$number = 1;
$winners = array_filter($tickets, function ($ticket) use ($number) {
return $ticket['raffle_ticket_num'] == $number;
});
// $winners now has all winning tickets.
var_dump($winners);
// Bonus pick a random winner
shuffle($winners);
var_dump(current($winners));
所以,最好也是最简单的方法是在莱佛士环路之外准备好门票阵列。
解决方案
<?php
$tickets[] = array(
'ticket_id' => 1,
'user_id' => 2,
'raffle_ticket_num' => 15
);
$tickets[] = array(
'ticket_id' => 2,
'user_id' => 2,
'raffle_ticket_num' => 25
);
$tickets[] = array(
'ticket_id' => 3,
'user_id' => 1,
'raffle_ticket_num' => 21
);
$raffles = range(1, 50);
// Preparing tickets array. Now when I think Flattened is not the best word to describe it :)
$ticketsFlattened = array();
foreach ($tickets as $ticket) {
$ticketsFlattened[$ticket['raffle_ticket_num']] = $ticket;
}
// Could be while if you want
foreach ($raffles as $number) {
if (array_key_exists($number, $ticketsFlattened)) {
echo sprintf(
"Ticket %s is clamed by %s, ticket id %s %s",
$number,
$ticketsFlattened[$number]['user_id'],
$ticketsFlattened[$number]['ticket_id'],
PHP_EOL
);
} else {
echo sprintf("Ticket %s unclaimed %s", $number, PHP_EOL);
}
}
只需添加foreach($key=>tickets)
If键用于其他目的。谢谢你的回答!但是在我的例子中使用foreach的问题是,它在while循环中使用,这导致它打印每个结果的次数与查询结果的总数一样多…因此,对于2个结果,它会将每个结果打印2次。请参阅我上面更新的帖子使用foreach即可
如下图所示,您是否可以给出输入的小数据样本、您期望得到的结果以及错误的结果?是的,当然。请在此处查看:。粗体数字是插槽21和38,显示用户id(1)。但正如您所见,它会显示每个数字2次(因为foreach有2个结果)同一票证号码是否可以由2个用户拥有?假设答案为“否”,并使用解决方案更新我的答案。效果非常好:)非常感谢您的帮助!
<?php
$tickets[] = array(
'ticket_id' => 1,
'user_id' => 2,
'raffle_ticket_num' => 15
);
$tickets[] = array(
'ticket_id' => 2,
'user_id' => 2,
'raffle_ticket_num' => 25
);
$tickets[] = array(
'ticket_id' => 3,
'user_id' => 1,
'raffle_ticket_num' => 21
);
$raffles = range(1, 50);
// Preparing tickets array. Now when I think Flattened is not the best word to describe it :)
$ticketsFlattened = array();
foreach ($tickets as $ticket) {
$ticketsFlattened[$ticket['raffle_ticket_num']] = $ticket;
}
// Could be while if you want
foreach ($raffles as $number) {
if (array_key_exists($number, $ticketsFlattened)) {
echo sprintf(
"Ticket %s is clamed by %s, ticket id %s %s",
$number,
$ticketsFlattened[$number]['user_id'],
$ticketsFlattened[$number]['ticket_id'],
PHP_EOL
);
} else {
echo sprintf("Ticket %s unclaimed %s", $number, PHP_EOL);
}
}