1

次のような文字列(URLパス)が/recipes/cheese/cheese-meat-loafあり、次のようなパスの巨大な配列があります

'/recipes/',
'/content/'
...

パスを取得して、パスの一部に一致するパスを配列内で見つけたいと思います。したがって、この例では/recipes/、パスに/ recipes /が含まれているため、配列内で一致しますが、配列に含ま/recipes/cheese/れている場合もあります。その場合は、代わりにそれに一致する必要があります。

だから、私はパスの間をすべて差し引いて、/それを一致させたいと思っています...

`/recipes/cheese/cheese-meat-loaf` then if not found
`/recipes/cheese/` then if not found
`/recipes/` then if not found
return default

そして、巨大な配列の値を返します(キーはパスです)。

値が1つだけで、複数ある可能性があるため、逆方向に移動したい/recipes/*/

しかし、私はこれをどのように行うのかわかりません。

4

4 に答える 4

2

私たちはあなたのためにあなたのコーディングをするためにここにいるわけではないので、あなたがあなた自身であなたのコードを書くための「レシピ」を書きましょう。その後、途中で問題が発生した場合は、より具体的な質問をしてここに戻ることができます。これにより、より適切にサポートを提供できます。

  1. 配列で現在の検索文字列を検索します
  2. 見つかった場合は、配列の値を返します
  3. 見つからない場合は、検索文字列で最後に出現するスラッシュ文字を検索し、それに続くすべてのものと一緒に削除します
  4. 新しい検索文字列で1からやり直してください
于 2012-10-29T14:12:26.793 に答える
0

最後の/を切り取って、ループ内のURLを短くし、その値で配列を検索してみてください。

$arr = array([with many elements]);
$url = '/recipes/cheese/cheese-meat-loaf';
$found = false;
while ($found === false && $url !== '') {
  if (in_array($url, $arr)) $found = $url;
  else {
    $shorten = preg_replace('/(\/[^\/]*)$/', '', $url);
    if ($shorten === $url) break;
    else $url = $shorten;
  }
}
echo $found !== false ? 'found: ' . $url : 'not found';

実例

于 2012-10-29T14:11:06.360 に答える
0

PHPにはexplode、文字列を断片に展開するという関数があります。 explode("/",$inputstring)配列を返します。例えば:

explode("/",'/recipes/cheese/cheese-meat-loaf');

array(
    [0]=>"recipies"
    [1]=>"cheese"
    [2]=>"cheese-meat-loaf"
)

あなたも爆発することができますcheese-meat-loaf

于 2012-10-29T14:11:47.890 に答える
0

最長のパスが最初になるように、パスの配列を並べ替えます。次に、最初の一致を確認して返します。

$array = array(
    '/recipies',
    '/recipies/cheese'
    );

$url = "/recipies/cheese/fondue";

function lsort($a,$b){
    $diff = strlen($b) - strlen($a);
    return $diff;
}

usort($array,'lsort');

foreach( $array as $path ){
    echo "Testing $path<br/>";
    if( !strncmp($url, $path, strlen($path)) ){    
       echo "Best match is $path</br/>";
       break;
    }
}

サンプル出力:

Testing /recipies/cheese
Best match is /recipies/cheese
于 2012-10-29T16:40:17.460 に答える