【问题标题】:multi dimensional array in random order随机顺序的多维数组
【发布时间】:2011-06-15 08:46:36
【问题描述】:

我想让我的多维数组处于随机顺序。你会怎么做?

// This is how the array looks like
print_r($slides);

Array
(
    [0] => Array
        (
            [id] => 7
            [status] => 1
            [sortorder] => 0
            [title] => Pants
        )

    [1] => Array
        (
            [id] => 8
            [status] => 1
            [sortorder] => 0
            [title] => Jewels
        )

    [2] => Array
        (
            [id] => 9
            [status] => 1
            [sortorder] => 0
            [title] => Birdhouse
        )

    [3] => Array
        (
            [id] => 10
            [status] => 1
            [sortorder] => 0
            [title] => Shirt
        )

    [4] => Array
        (
            [id] => 11
            [status] => 1
            [sortorder] => 0
            [title] => Phone
        )

)

// This how the result is if I use array_rand()
print_r(array_rand($slides, 5));

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

// This how the result is if I use shuffle()
print_r(shuffle($slides));

1

【问题讨论】:

标签: php


【解决方案1】:

shuffle() 是去这里的方式。它打印1,因为shuffle 更改了数组就地 并返回一个布尔值,正如documentation 中所写:

成功返回TRUE,失败返回FALSE

我建议也阅读documentation of array_rand()

从数组中选择一个或多个随机条目,并返回随机条目的一个(或多个)键


如果您使用内置函数,请务必阅读文档。不要只是假设它是如何工作的。我敢打赌,写这个问题比查这个问题要花更多的时间。

【讨论】:

  • 对“不要只是假设它们是如何工作的”投赞成票,因为 php 函数是不一致的 :)
  • 手掌对着头部当然!我误解了 php.net 上 shuffle() 的解释
  • 我觉得这是一个愚蠢的评论,但我认为“衬衫”希望在洗牌后保持其“状态”。换句话说,只有第一个维度会被打乱,对吧?
  • 虽然 print_r 在教室里工作,但在现实世界中,当您需要使用 echo 时,请使用 $slides[0][1]。一 (1) 是要返回的数组的一部分。这在 PHP 手册中并不明显。换句话说,您希望回显第一个数组 (0) 和需要的部分
【解决方案2】:

代替

print_r(shuffle($slides));

shuffle($slides);
print_r($slides);

您会看到 shuffle() 就地打乱数组

【讨论】:

  • 感谢所有反对票。不过,对出了什么问题发表评论会很好
【解决方案3】:

我不确定你希望它如何显示,但你可以循环数组并使用 php rand(0,arraylen) 函数来解析数组。

【讨论】:

    【解决方案4】:

    完美运行。 print_r(shuffle($slides))) 给出 TRUE 的输出,因为 shuffle 的返回值是布尔值而不是数组。

    在此处查看工作示例:http://codepad.org/B5SlcjGf

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 2016-03-11
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      相关资源
      最近更新 更多