【问题标题】:Why the array_rand() is not returning me the expected array output?为什么 array_rand() 没有返回我预期的数组输出?
【发布时间】:2015-07-14 08:09:07
【问题描述】:

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

为什么会这样?

谢谢。

【问题讨论】:

  • 有什么问题?你期望得到什么?你看说明书了吗?!
  • @Rizier123 :如果第一个和最后一个元素是随机选择的,我已经添加了预期的输出。

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


【解决方案1】:

您收到键数组。来自文档

当只选择一个条目时,array_rand() 返回随机的键 入口。否则,将返回随机条目的键数组。 这样做是为了也可以从数组中选择随机键 作为随机值。试图选择比 数组将导致 E_WARNING 级别错误,NULL 将是 返回。

使用此代码

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

【讨论】:

  • OP 的预期结果是什么?
  • 我确定他想要拖曳随机物品
  • 如果第一个和最后一个元素是随机选择的,我已经添加了预期的输出。
  • @splash58 我确定来自什么?在他最初的问题中,我没有看到任何 OP 的预期输出。
  • @user2839497 是的,array_rand 必须给出随机键集
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多