Я пытаюсь использовать функцию SHUFFLE, чтобы показать FILE1.php или FILE2.php в случайном порядке. Вот мой код:
<?php
$banner1 = include 'file1.php';
$banner2 = include 'file2.php';
$banners = array( $banner1, $banner2);
shuffle($banners);
print $banners[0]
?>
Проблема у меня — если вместо этого включите ‘file1.php’; я просто использую текст или код, он отлично работает.
Но если я перетасую функцию INCLUDE, она покажет ОБА file1php и file2.php одновременно.
Пожалуйста помоги.
Вы включаете оба файла, когда назначаете их переменным. Включите файл, выбранный из перемешанного массива. Попробуй это:
$banner1 = 'file1.php';
$banner2 = 'file2.php';
$banners = array($banner1, $banner2);
shuffle($banners);
include($banners[0]);
Когда ты пишешь $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];
Тогда, как сказал Фред-II, вы можете попробовать array_rand
, http://php.net/manual/en/function.array-rand.php
Во-первых, вы не хотите назначать возвращаемое значение include()
, потому что он вернет только false или 1. Для получения дополнительной информации см. руководство: http://php.net/manual/en/function.include.php
И цитата оттуда:
Обработка возвратов: включает возвращает ЛОЖЬ в случае неудачи и выдает предупреждение. Успешные включения, если они не переопределены включенным файлом, возврат 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];
?>