1

私はためらいながらここを歩き回り、サブ要素を持つ配列を渡しました(いわば)。3つのランダムな値が必要ですが、これらは繰り返すことなく取得されます。

配列は次のとおりです。

    配列
    (
        [0] => 配列
            (
                [uid] => 1
                [チケットコード] => 0oreb8yo
            )

        [1] => 配列
            (
                [uid] => 1
                [チケットコード] => 2oeii8hm
            )

        [2] => 配列
            (
                [uid] => 1
                [チケットコード] => m0dwtjiw
            )

        [3] => 配列
            (
                [uid] => 1
                [チケットコード] => q6c7cymb
            )

        [4] => 配列
            (
                [uid] => 1
                [チケットコード] => zyqhm5bj
            )

        [5] => 配列
            (
                [uid] => 1
                [チケットコード] => amdqzjpi
            )

        [6] => 配列
            (
                [uid] => 2
                [チケットコード] => tzql7l42
            )

        [7] => 配列
            (
                [uid] => 2
                [チケットコード] => gap0r6vf
            )

        [8] => 配列
            (
                [uid] => 2
                [チケットコード] => ypqum5yz
            )

        [9] => 配列
            (
                [uid] => 4
                [ticket_code] => smupluac
            )

        [10] => 配列
            (
                [uid] => 4
                [チケットコード] => 9d8jsha7
            )

        [11] =>配列
            (
                [uid] => 5
                [チケットコード] => 6hdnja42
            )

    )

そして、3 つの "ticket_code" を取得する必要がありますが、"uid" を繰り返す権利はありません。

私は次のように試してきましたが、「uid」も繰り返します。

$ticketsWinners = array();
  for ($i=0; $i < 3; $i++) {
    $aux = array_rand($allTickets);
    $aux2 = $allTickets[$aux]['uid'];

    $ticketsWinners[] = array(
      'uid' => $aux2,
      'ticket_code' => $allTickets[$aux]['ticket_code']
    );
  }

繰り返さずにそれを行う方法はありますか?

どなたかご存知の方いらっしゃいましたら宜しくお願い致します^^

4

3 に答える 3

1

次のようなものを試してください:

$ticketsWinners = array();
while (sizeof($ticketsWinners) < 3) {
    $aux = array_rand($allTickets);
    // array_rand return array of keys so you need first value only
    $uid = $allTickets[$aux[0]]['uid']

    // add uid as a key so ass not tot check all $allTickets values
    if (!isset($ticketsWinners[$uid]))
        $ticketsWinners[$uid] = $allTickets[$aux[0]]; 
}
// if you need $allTickets back to numeric keys [0, 1, 2]
$allTickets = array_values($allTickets);

無限ループ(実際に発生する可能性があります)が怖い場合は、これを試してください:

$ticketsWinners = array();
// shuffle array before checking
shuffle($allTickets);
foreach ($allTickets as $tick_data) {
    $uid = $tick_data['uid'];

    if (!isset($ticketsWinners[$uid]))
        $ticketsWinners[$uid] = $tick_data;

    if (sizeof($ticketsWinners) == 3)
        break;
}

ここで最悪の場合、$allTickets配列をチェックして size の勝者を取得します<= 3

于 2014-07-06T06:28:33.443 に答える