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

时间:2015-07-14 08:09:08

标签: php arrays random multidimensional-array associative-array

我有一个标题为$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                   
                    )
)

为什么会这样?

感谢。

2 个答案:

答案 0 :(得分:1)

您会收到一系列密钥。来自doc

  

当只选择一个条目时,array_rand()返回随机密钥   条目。否则,返回随机条目的键数组。   这样做是为了也可以从阵列中挑选随机密钥   作为随机值。试图挑选比那里更多的元素   数组将导致E_WARNING级别错误,并且将为NULL   返回。

使用此代码

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

答案 1 :(得分:0)

array_rand(array,number) 从数组中返回一个随机密钥,如果您指定该函数应返回多个密钥,则返回一个随机密钥数组。

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

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

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

这意味着随机值为$ all_events ['数据'] [0]和$ all_events ['数据'] [2]。

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

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

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