PHP Shuffle包含(ed)文件

时间:2015-03-09 15:20:28

标签: php arrays include shuffle

我试图使用SHUFFLE函数随机显示FILE1.php或FILE2.php。这是我的代码:

<?php
$banner1 = include 'file1.php';
$banner2 = include 'file2.php'; 

$banners = array( $banner1, $banner2);

shuffle($banners);

print $banners[0] 
?>

我遇到的问题 - 如果不使用 包含&#39; file1.php&#39;; 我只使用文字或代码,它可以正常使用。

但如果我改变INCLUDE函数,它会同时显示BOTH file1.php和file2.php。

请帮忙。

3 个答案:

答案 0 :(得分:5)

将这两个文件分配给变量时,您将同时包含这两个文件。包括从混洗数组中选择的文件。试试这个:

$banner1 = 'file1.php';
$banner2 = 'file2.php'; 

$banners = array($banner1, $banner2);

shuffle($banners);

include($banners[0]);

答案 1 :(得分:4)

当您编写$banner1 = include 'file1.php';时,会包含该文件。 这是按值调用策略。这意味着,当您为变量赋值时,会计算该值(此处包含您的文件)。

这是你的脚本正在做的事情:

<?php

// Include file1, and put include's return value in $banner1
$banner1 = include 'file1.php';

// Include file2, and put include's return value in $banner2
$banner2 = include 'file2.php'; 

// Create an array with these return values, shuffle
$banners = array( $banner1, $banner2);
shuffle($banners);

// And print one return value
print $banners[0] 

那不是你想要的。您想要随机选择一个文件,然后包含它。您的脚本应如下所示:

<?php
$banners = array('file1.php', 'file2.php');
shuffle($banners);
include $banners[0];

然后,正如Fred-ii所说,你可以试试array_randhttp://php.net/manual/en/function.array-rand.php

答案 2 :(得分:3)

首先,您不想指定include()的返回值,因为它只返回false或1.有关详细信息,请参阅手册:http://php.net/manual/en/function.include.php

从那里引用:

  

处理退货:在失败时包括返回FALSE 并发出警告。除非被包含的文件覆盖,否则成功包括返回1

这应该适合你:

<?php

    ob_start();
    require_once("file1.php");
    $banner1 = ob_get_contents();

    ob_clean();

    require_once("file2.php");
    $banner2 = ob_get_contents();
    ob_end_clean();


    $banners = [$banner1, $banner2];
    shuffle($banners);
    echo $banners[0];

?>