簡體   English   中英

有沒有更有效的方法來確保隨機列表不包含URL的一部分?

[英]Is there a more efficient way to make sure a randomized list doesn't contain a portion of the URL?

我正在尋找一種更有效的方法來確保四個項的隨機列表(來自數組)不包含當前URL的文件名。

該解決方案不使用數據庫。 $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>";
}

使用array_filter過濾$rand_keys數組:

$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM