我正在尝试从“相关”目录中的一组文件中获取2个随机结果。我已设法从目录中随机抽取两个结果,但我需要避免某些结果,具体取决于与特定文件名相关的变量。
到目前为止我的代码是:
$foo = "bar.php";
function random_file($dir) {
$files = opendir($dir . '/*.php');
$rand_files = array_rand($files, 2);
return array(include $files[$rand_files[0]], include $files[$rand_files[1]]);
}
list($file_1,$file_2) = random_file("related");
我正在尝试提取两个随机结果,但请避开该文件:bar.php
。有没有人知道从阵列中省略某些结果的方法,因为我在网上找不到任何东西甚至关闭?
答案 0 :(得分:1)
您可以将glob功能与特定的正则表达式一起使用,只选择与您匹配的名称。这会将您的初始$files
变量限制为满足您条件的结果,您可以继续进行随机抽样而无需修改。
// entries containing foo will not be included
function random_file($dir) {
$files = glob("^(?!bar.php)*");
$rand_files = array_rand($files, 2);
return array(include $files[$rand_files[0]], include $files[$rand_files[1]]);
}
list($file_1,$file_2) = random_file("related");
答案 1 :(得分:0)
试试这个。它将随机化你的数组,直到它选择除bar.php
之外的两个记录$rand_files = array_rand($files, 2);
while(in_array("bar.php",$rand_files))
{
$rand_files = array_rand($files, 2);
}
答案 2 :(得分:0)
您还需要考虑诸如“。”之类的目录。和'..'。我认为整个数组中的那些值的switch语句和unset()都可以。然后,一旦你有一个不包含你不想要的文件的数组。然后你可以拉两个randoms并返回该数组。
此代码可能不是100%完美,但应该让您朝着正确的方向前进。
function random_file($dir) {
$fileArray = array();
if (is_dir($dir)) {
if ($dh = opendir($dir . '/*.php')) {
while (($file = readdir($dh)) !== false) {
$fileArray = array_push($fileArray, $file)
}
for( $i = 0; $i < count($fileArray); $i++ ) {
switch($fileArray) {
case '.':
unset($array[$i]);
break;
case '..':
unset($array[$i]);
break;
case 'bar.php':
unset($array[$i]);
break;
}
}
}
closedir($dh);
}
$rand_files_keys = array_rand($fileArray, 2);
$rand_files = $fileArray[$rand_files_keys[0]];
$rand_files = $fileArray[$rand_files_keys[1]];
return $rand_files;