忽略随机数组PHP的某些结果

时间:2016-11-18 16:27:02

标签: php arrays

我正在尝试从“相关”目录中的一组文件中获取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。有没有人知道从阵列中省略某些结果的方法,因为我在网上找不到任何东西甚至关闭?

3 个答案:

答案 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;