【问题标题】:PHP Shuffle Include(ed) FilesPHP Shuffle 包含(ed)文件
【发布时间】:2015-05-10 19:42:48
【问题描述】:

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

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

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

shuffle($banners);

print $banners[0] 
?>

我遇到的问题 - 如果我不使用 include 'file1.php'; 而只是使用文本或代码,它可以正常工作。

但如果我随机播放 INCLUDE 函数,它会同时显示 file1.php 和 file2.php。

请帮忙。

【问题讨论】:

  • 试试array_rand()。很多方法可以做到这一点。只需谷歌“显示随机文件 php”,您就会找到一大堆答案。
  • 补充说明:“include”是一个语句,而不是一个函数。如果无法加载文件,则返回 false,否则返回 true。没有什么可以做的。
  • @NaeiKinDus 谢谢 -m 我不是程序员,也不知道其中的区别……我是门外汉 :) 只是想学习代码。
  • @Fred-ii- 我也会对此进行探讨。感谢您的建议。干杯!
  • @RoofingCalculator 一个商人;就在(此处相同);-) 不客气。 我们是稀有品种 - 干杯!

标签: php arrays include shuffle


【解决方案1】:

当您将这两个文件分配给变量时,您将它们包括在内。包括从随机排列的数组中选择的文件。试试这个:

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

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

shuffle($banners);

include($banners[0]);

【讨论】:

    【解决方案2】:

    当您编写$banner1 = include 'file1.php'; 时,该文件被包含在内。 这就是 call-by-value 策略。这意味着,当您将值分配给变量时,会计算该值(这里包括您的文件)。

    这是您的脚本正在执行的操作:

    <?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

    【讨论】:

      【解决方案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];
      
      ?>
      

      【讨论】:

      • 加载所有文件并将它们保存在内存中并使用输出缓冲......我不确定这应该是要走的路。
      • @NaeiKinDus 我同意你的观点,但首先我想向 OP 表明他无法按照自己的意愿保存 include 的返回值,其次它应该显示另一种方式
      猜你喜欢
      • 2011-08-02
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多