在PHP中从数组中获取随机对象

时间:2014-08-13 05:27:42

标签: php arrays random

首先,请原谅我,如果我的语言不对 - 我还在学习如何用编程语言说和写。当该数组有多个键值对时,如何从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]);

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:3)

不需要那种沉重的功能

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

答案 1 :(得分:0)

功能应该是这样的

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

的单个参数调用函数

答案 2 :(得分:0)

你为什么不试试这个:

$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>';
}

答案 3 :(得分:0)

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

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