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);
    }
}