我正在寻找一种更有效的方法来确保四个项目(来自数组)的随机列表不包含当前网址的文件名。
该解决方案不使用数据库。 $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>";
}
答案 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);