2016-07-29 7 views
-1

私はWordPressに実装できるスクリプトを書こうとしています。これの目的は本当に重要ではありません。文字列とPHPの複数の配列を別々に比較するにはどうすればよいですか?

私が得ようとしているのは、URLを検出し、URLのどの部分に4つの異なる配列の文字列が含まれているかを確認し、正しいファイルを含めるスクリプトです。

これは私が現在持っているものです。

<?php 
    //Detect URL and remove slashes and ".php" 
    $url = $_SERVER["REQUEST_URI"]; 
    $find = array('/', '.php'); 
    $clear = array(' ', ' '); 

    //Arrays to detect from 
    $region1 = array('LosAngeles', 'SantaMonica', 'Hollywood'); 
    $region2 = array('Houston', 'Dallas'); 
    $region3 = array('Las Vegas', 'SaltLakeCity'); 

    //Assign a region 
    if (in_array($url, $region1)) { 
      $region = "California"; 
     } 
     elseif (in_array($url, $region2)) { 
      $region = "Texas"; 
     } 
     elseif (in_array($url, $region3)) { 
      $region = "Nevada"; 
     } 

    //Load file based on region 
    if ($region = "California";) { 
      include "file1.php"; 
     } 
     elseif ($region = "Texas") { 
      include "file2.php"; 
     } 
     elseif ($region = "Nevada") { 
      include "file3.php"; 
     } 
?> 

私はすでにforeachを試してみましたが、それはあなたが1つの以上の配列のためのループを実行することはできません。私もarray_intersectをやろうとしていません。 URLが少なくとも1つの配列と一致するかどうかを確認するだけです。

皆さんのご協力がよろしくです!

ありがとうございました!

+0

コードで作業していないものについて説明しますか? – alzee

+0

不完全なコードでは答えが難しいですが、私は多次元配列を提案し、各ループにネストします – theHands

答えて

1

あなたの質問にはすでにforeacharrayと名前が付けられており、正しい方向を指しています。

しかし、最初に、私は、この変数の命名を指摘したいと思います:

//Arrays to detect from 
$region1 = array(...); 
$region2 = array(...); 
$region3 = array(...); 

実際に簡単に再びforeachとその後、互換性のある変数は、あなたがそれを使用することができますようことになり、配列で表すことができ、これらの3つの可変反復(オーバートラバース)配列:

$regions = [ 
    "California" => [ ... ], 
    "Texas" => [ ... ], 
    "Nevada" => [ ... ], 
]; 

foreach ($regions as $region => $cities) { 
    ... 
} 

は今、あなただけの必要なもののファイル名をするために含めること地域からのマップです:

$files = [ 
    "California" => "file1", 
    "Texas" => "file2", 
    ... 
] 

その後、あなたは簡単にforeach以内にそれをマッピングすることができます。

if (!isset($files[$region])) { 
    throw new UnexpectedValueException(sprintf("File for region %s missing", var_export($region, true)))); 
} 
$file = sprintf("%s.php", $files[$region]); 
include($file); 
return; 

このミニプログラムは、地域のために定義されたファイルがあるかどうかを確認し、それが含まれます。それはif節を使用しないのであなたの例とは異なりますが、領域の一致があれば返します。しかし、最初はマッチングの理由が予想されます。

だからあなたが都市に基づいた地域に一致する一つのケースを見つけるためにループ内でこれを配線する必要があります。

foreach ($regions as $region => $cities) { 
    if (!in_array($url, $cities)) 
     continue; 
    } 
    if (!isset($files[$region])) { 
     throw new UnexpectedValueException(
      sprintf("File for region %s missing", var_export($region, true))); 
    } 
    $file = sprintf("%s.php", $files[$region]); 
    include($file); 
    return; 
} 
throw new UnexpectedValueException(
    sprintf("No region found for URL %s", var_export($url, true)) 
); 

テイク遠かった:

  • はない数の変数を行います。 - >ほとんどの場合、これは代わりに配列をとることができる記号です。

  • 多くの中から1つのケースがある場合は、ループ内に1つのケースが存在することがよくあります。

  • PHPの配列もハッシュマップです。何かが存在するかどうかを尋ねることができます(例えば、それが鍵です)。あなたの利益にマップを使用してください。

関連する問題