【问题标题】:PHP Single line array shuffle is not workingPHP单行数组洗牌不起作用
【发布时间】:2015-01-02 01:32:08
【问题描述】:

很简单,但我想知道为什么这不起作用。

我正在尝试打乱一个数组并输出结果(在单行结构中)

这是我的代码:

echo shuffle(array("A","B","C"))[0];

这里需要小调整;)

【问题讨论】:

  • 你得到什么错误??
  • 致命错误:只能通过引用传递变量...
  • 是的 shuffle 使用引用,所以你的数组必须是一个变量。
  • 没有单行技巧解决方案?
  • 不,shuffle 也不返回数组...它返回 true 或 false。

标签: php arrays random echo shuffle


【解决方案1】:

您的基本逻辑有点错误。我猜你只对一个值感兴趣?要考虑到这个逻辑来解决它,你可以这样做:

echo array_rand(array_flip(['A', 'B', 'C']));

【讨论】:

  • array_rand() 只返回键,不返回值
  • 工作!完美兄弟!!! (需要等待投票 + 接受 [投票需要 15 声望]... sry):)
【解决方案2】:

试试下面的代码

   $arr = array("A","B","C");
   shuffle($arr);
   echo $arr[0];

【讨论】:

    【解决方案3】:

    我知道这不是最适合您的解决方案,但它确实有效!

    print_r( ( $b=array('A', 'B', 'C') ) && shuffle($b) ? next($b) : null );
    

    这是如何工作的:

    • 将数组赋值给变量$b
    • 洗牌变量$b
      • 如果shuffle() 成功:
        • 返回数组中的下一个元素
      • 如果shuffle() 失败:
        • 返回null

    有些人可能会想:“他为什么不使用current() 函数?”

    好吧,函数shuffle 似乎只是改变了键的顺序,但指针始终指向同一个元素。这意味着current() 将始终返回'A'。

    显然,这种行为在 PHP 5.4 上发生了改变,将指针设置为第一个元素。

    【讨论】:

    • 好兄弟!我也尝试过 current() 并且它确实有效! :-)
    • @Steven 它对我不起作用,它总是返回'A'。也许 PHP 5.4 及更高版本的行为发生了变化。我在 PHP 5.3 上进行了测试,current() 函数具有我所描述的行为。
    • 好人!我正在使用 PHP 5.4.4 版!完美运行! :-) 好答案!谢谢!
    • @Steven 你很高兴。这是隐式布尔转换的一个很好的用法。很高兴知道我对 PHP 版本没有错。
    【解决方案4】:

    试试这个简单的功能

    $my_array = array("A","B","C","D","E");
    shuffle($my_array);
    print_r($my_array);
    

    【讨论】:

    • 我知道一个兄弟...我在问单行解决方案:)
    【解决方案5】:

    您需要在单独的变量中传递数组。另外,shuffle() 本身只是返回一个布尔值,所以你需要返回一个数组元素而不是函数的输出。

    $ar = array("A","B","C");
    shuffle($ar);
    echo $ar[0];
    

    【讨论】:

    • 我知道一个兄弟...我在问单行解决方案...也许有回调? :)
    猜你喜欢
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2019-08-18
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多