2017-06-11 21 views
0

私は4つの項目(配列から)の無作為化リストに現在の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>"; 
} 
+0

'foreach'言語構造がありますが。 –

答えて

1

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); 
+0

ちょっとu_mulder、あなたの提案に感謝、百万。これは明らかに「コードが少ない」ですが、サーバーの観点から見れば「効率的か」ということは分かりますか?再度、感謝します。 –

+0

テストを実行し、時間とメモリの制限を比較します。 –

+0

そして配列の4つの要素については、最適化するものは何もないと確信しています。 –

関連する問題