【问题标题】:Getting a random object from an array in PHP从 PHP 中的数组中获取随机对象
【发布时间】:2014-08-13 05:27:41
【问题描述】:

首先,如果我的语言有问题,请原谅我 - 我仍在学习如何用编程语言说和写。当数组有多个键值对时,如何从 PHP 中的数组中检索整个对象?

<?php

  $quotes = array();
  $quotes[0] = array(
    "quote" => "This is a great quote",
    "attribution" => "Benjamin Franklin"
  );
  $quotes[1] = array(
    "quote" => "This here is a really good quote",
    "attribution" => "Theodore Roosevelt"
  );

function get_random_quote($quote_id, $quote) {

  $output = "";
  $output = '<h1>' . $quote["quote"] . '.</h1>';
  $output .= '<p>' . $quote["attribution"] . '</p>';

  return $output;
} ?>

<?php 
  foreach($quotes as $quote_id => $quote) {
  echo get_random_quote($quote_id, $quote); 
} ?>

使用 array_rand 和 var_dump 我可以在浏览器中以原始形式查看项目,但我无法真正弄清楚如何让每个元素以 HTML 格式显示。

$quote = $quotes;
$random_quote = array_rand($quote);
var_dump($quote[$random_quote]);

提前感谢您的帮助!

【问题讨论】:

  • 你的预期输出是什么?
  • 首选输出是随机显示一个报价。

标签: php arrays random


【解决方案1】:

不需要那种繁重的功能

$random=$quotes[array_rand($quotes)]; 
echo $random["quote"];
echo $random["attribution"];

还有,这是没用的

<?php 
  foreach($quotes as $quote_id => $quote) {
  echo get_random_quote($quote_id, $quote); 
} ?>

如果您必须对所有元素运行一个循环,那么为什么首先要随机化下摆?这是圆形的。您应该只运行循环与输出中所需的引号一样多的次数。但是,如果您只需要所有引号但顺序是随机的,那么可以简单地在一行中完成。

shuffle($quotes);            // this will randomize your quotes order for loop
foreach($quotes as $qoute)
{
   echo $quote["quote"];
   echo $quote["attribution"];
}

这也将确保您的引号不会重复,而您自己的解决方案和其他建议仍将随机重复您的引号以获取任何合理大小的引号数组。

你的函数的一个更简单的版本是

function get_random_quote(&$quotes)
 {
  $quote=$quotes[array_rand($quotes)]; 
  return <<<HTML
            <h1>{$quote["quote"]}</h1>
            <p>{$quote["attribution"]}</p>
HTML;
} 

【讨论】:

  • shuffle 功能不会显示所有的引号吗?抱歉没有更清楚,但最终我只想显示一个引用,然后最终有一个链接会在同一代码块中生成另一个随机引用来替换原始引用。
  • 是的,这将显示所有引号,但是您自己的解决方案也错误地执行了该操作。如果您每次只需要一个随机报价,那么只需使用此答案的前 3 行
  • 谢谢 Hanky Panky,这正是我想要的 - 你太棒了!非常感谢 :) 如果我确实想获取附加到 URL 的 ID,我将如何获取引用的 ID?
  • 我想我可以将其添加为键值对?
  • 对不起,我误解了你的最后一个问题。您可以从数组中的函数返回 id 以及 html。或者您可以返回对象本身并在您调用它的位置对其进行格式化。这样你也会得到 id
【解决方案2】:

功能应该是这样的

function get_random_quote($quote_id, $quote) {

  $m = 0;
  $n = sizeof($quote)-1;

  $i= rand($m, $n); 
  $output = "";
  $output = '<h1>' . $quote[$i]["quote"] . '.</h1>';
  $output .= '<p>' . $quote[$i]["attribution"] . '</p>';

  return $output;
}

但是你没有在函数中使用你的第一个参数-$quote_id。你可以删除它。并调用具有单个参数的函数,即数组$quote

【讨论】:

    【解决方案3】:

    你为什么不试试这个:

    $quote = $quotes;
    $random_quote = array_rand($quote);
    $random = $quote[$random_quote];
    echo '<h1>' . $random["quote"] . '.</h1><br>';
    echo '<p>' . $random["attribution"] . '</p>';
    

    想创建一个函数:

    echo get_random_quote($quotes); 
    
    function get_random_quote($quotes) {
        $quote = $quotes;
        $random_quote = array_rand($quote);
        $random = $quote[$random_quote];
        return '<h1>' . $random["quote"] . '.</h1><br>'.'<p>' . $random["attribution"] . '</p>';
    }
    

    【讨论】:

      【解决方案4】:

      首先,你不需要get_random_quote()中的$quote_id,应该是这样的:

      function get_random_quote($quote) {
      
        $output = "";
        $output = '<h1>' . $quote["quote"] . '.</h1>';
        $output .= '<p>' . $quote["attribution"] . '</p>';
      
        return $output;
      } 
      

      而且我看不到该函数正在执行的任何随机操作。您只是在遍历数组:

      foreach($quotes as $quote_id => $quote) {
        echo get_random_quote( $quote); 
      }
      

      根据http://php.net/manual/en/function.array-rand.php

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

      所以我猜$quote[$random_quote] 应该返回你的元素,你可以像这样使用它:

      $random_quote = array_rand($quotes);
      echo get_random_quote($quote[$random_quote]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-16
        • 2020-05-24
        • 2020-12-05
        • 1970-01-01
        • 2013-04-28
        相关资源
        最近更新 更多