有没有更有效的方法来确保随机列表不包含URL的一部分?

时间:2017-06-11 20:07:56

标签: php arrays if-statement random

我正在寻找一种更有效的方法来确保四个项目(来自数组)的随机列表不包含当前网址的文件名。

该解决方案不使用数据库。 $relatedArray[$rand_keys[0]]是在此.php文件中创建的标准数组。它包含大约100个代码片段,每个片段(数组中的项目)包含一个唯一的URL。

我已经提出了以下解决方案。它有效,但我猜测有一个更有效的解决方案。任何建议都非常感谢。

// How to isolate a filename in a URL - https://stackoverflow.com/questions/2183486/php-get-file-name-without-file-extension
$fileName =  pathinfo($_SERVER['REQUEST_URI']);

$rand_keys = array_rand($relatedArray, 4);

//Ignore if array value contains variable value. https://stackoverflow.com/questions/4366730/how-do-i-check-if-a-string-contains-a-specific-word-in-php
if (strpos($relatedArray[$rand_keys[0]], $fileName['filename']) !== false) {
    echo $relatedArray[$rand_keys[1]] . "\n<br>";
    echo $relatedArray[$rand_keys[2]] . "\n<br>";
    echo $relatedArray[$rand_keys[3]] . "\n<br>";
    } elseif (strpos($relatedArray[$rand_keys[1]], $fileName['filename']) !== false) {
    echo $relatedArray[$rand_keys[0]] . "\n<br>";
    echo $relatedArray[$rand_keys[2]] . "\n<br>";
    echo $relatedArray[$rand_keys[3]] . "\n<br>";
    } elseif (strpos($relatedArray[$rand_keys[2]], $fileName['filename']) !== false) {
    echo $relatedArray[$rand_keys[0]] . "\n<br>";
    echo $relatedArray[$rand_keys[1]] . "\n<br>";
    echo $relatedArray[$rand_keys[3]] . "\n<br>";
    } elseif (strpos($relatedArray[$rand_keys[3]], $fileName['filename']) !== false) {
    echo $relatedArray[$rand_keys[0]] . "\n<br>";
    echo $relatedArray[$rand_keys[1]] . "\n<br>";
    echo $relatedArray[$rand_keys[2]] . "\n<br>";
    } else {
    echo $relatedArray[$rand_keys[0]] . "\n<br>";
    echo $relatedArray[$rand_keys[1]] . "\n<br>";
    echo $relatedArray[$rand_keys[2]] . "\n<br>";
    echo $relatedArray[$rand_keys[3]] . "\n<br>";
}

1 个答案:

答案 0 :(得分:1)

使用$rand_keys

过滤您的array_filter数组
$name = $fileName['filename'];
$rand_keys = array_rand($relatedArray, 4);
$filtered = array_filter(
    $rand_keys,
    function ($v) use ($name) { return strpos($v, $name) === false; }
);
print_r($filtered);