为什么 array_rand() 没有返回预期的数组输出?

Why the array_rand() is not returning me the expected array output?

我有一个名为 $all_events 的数组,如下所示:

Array
(
    [status] => 1
    [data] => Array
        (
            [0] => Array
                (
                    [group_name] => 
                    [event_id] => 201
                    [view_id] => 0
                    [is_featured] => 0
                    [is_sponsor] => 0
                )

            [1] => Array
                (
                    [group_name] => 
                    [event_id] => 235
                    [view_id] => 0
                    [is_featured] => 0
                    [is_sponsor] => 0
                )

            [2] => Array
                (
                    [group_name] => 
                    [event_id] => 236
                    [view_id] => 0
                    [is_featured] => 0
                    [is_sponsor] => 0                   
                )

        )

    [msg] => Success
)

在结果数组中,我想要内部数组中的任意两个元素['data'],所以我为此编写了以下代码:

$new_arr = array_rand($all_events['data'], 2);
print_r($new_arr); die;

我得到了以下奇怪的输出:

Array
(
    [0] => 0
    [1] => 2
)

预期结果应该是这样的(如果是随机选择第一个和最后一个元素):

Array
            (
                [0] => Array
                    (
                        [group_name] => 
                        [event_id] => 201
                        [view_id] => 0
                        [is_featured] => 0
                        [is_sponsor] => 0
                    )        

                [2] => Array
                    (
                        [group_name] => 
                        [event_id] => 236
                        [view_id] => 0
                        [is_featured] => 0
                        [is_sponsor] => 0                   
                    )
)

为什么会这样?

谢谢。

您收到一组键。来自文档

When picking only one entry, array_rand() returns the key for a random entry. Otherwise, an array of keys for the random entries is returned. This is done so that random keys can be picked from the array as well as random values. Trying to pick more elements than there are in the array will result in an E_WARNING level error, and NULL will be returned.

使用此代码

foreach(array_rand($all_events['data'], 2) as $key)
    $new_arr[] = $all_events['data'][$key];
print_r($new_arr);

array_rand(array,number) return 是一个数组中的随机键,或者 return 是一个随机键数组,如果您指定该函数应该 return 不止一把钥匙.

$new_arr = array_rand($all_events['data'], 2);

$new_arr 是一个包含随机索引 $all_events['data'] 的数组。如果 $new_arr 如下所示

Array
(
    [0] => 0
    [1] => 2
)

表示随机值为$all_events['data'][0]和$all_events['data'][2].

如果您需要从 $all_events['data'] 中获取随机值,请尝试以下代码。

$new_arr = array_rand($all_events['data'], 2);

foreach($new_arr as $index){
    print_r($all_events['data'][$index]);
}