2017-11-09 30 views
1

私のような配列している。そして、私のような文字列ワイルドカードを含む文字列へのPHPの配列の完全な文字列一致検索

$links = array('home', 'contact', 'profile/*', 'link1', 'link2'); 

を持っている:

$current_url = 'profile/user1'; 

が配列かどうかをテストすることが可能です$links$current_urlループする必要はありません$links 私はループと​​機能でそれを行う方法を知っていますが、私は可能な限りループを回避しようとしています。 ここでの問題は、文字列に対して完全な文字列をワイルドカードで照合したいということです。

+0

[strpos](https://secure.php.net/strpos)はどうですか? – SianiparD

+0

'$ links'は配列である必要がありますか?静的か動的かは何とか定義されていますか?代わりにregexpを使用してみましょう。https://3v4l.org/octM2このようにして、 '*'ワイルドカード以外の複雑なパターンやパターンの組み合わせを定義することができます。 – fyrye

+1

ワイルドカード '*'の変数の使い方について詳しく説明できますか?それは常に非スラッシュを意味するのでしょうか?それは文字の部分集合を意味するのでしょうか?パイプで正規表現パターンを構築する(関数を反復する)か、foreachループを使って各要素をチェックするかのように、何らかのループを行う必要があります。パフォーマンス面で最善のことは、あなたのループの初期の 'break'条件を書いたり、(' array_search() 'のように)マッチするとすぐに停止する配列関数を使うことです。要素 '' profile/*/links/* ''が可能ならば、要素を '' rsort()で順序付けして優先順位を付ける必要があります。 – mickmackusa

答えて

0

特定の比較関数を尊重する配列のすべての値を抽出するarray_filterを使用できます。この比較関数は、ワイルドカードをテストできます。

このよう

$links = array('home', 'contact', 'profile/*', 'link1', 'link2'); 
$current_url = 'profile/user1'; 

function match($string) { 
    // Check if $string matches $current_url 
} 
array_filter($links, "match"); 

そしてarray_filterが何かが含まれている場合は、URLが一致していました。

+0

この回答には、真に有益な回答となる重要な処理部分がありません。この投稿は、「array_filter()を使ってみましたか?この回答は、OPが自己解決の失敗/不完全な試みとして問題に投稿すると期待していたものです。 – mickmackusa

関連する問題