2016-07-29 129 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是否与至少一个数组匹配。

所有你们的帮助表示感谢!

谢谢!

+0

你打算描述什么不适用于你的代码? – alzee

+0

不完整的代码很难回答,但我会建议一个多维数组和每个循环嵌套 – theHands

回答

1

你已经在你的问题中命名为foreacharray并且指向正确的方向。

但首先,我想指出,这个变量命名:

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

这三个变量实际上可以通过一个数组,又让这个变量然后用foreach兼容,你可以用它来更容易代表遍历(遍历以上)的数组:

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

外卖:

  • 别号变量 - >几乎总是这是一个你可以改为数组的符号。

  • 如果有很多情况下,它通常是一个单一的,如果在一个循环内。

  • PHP中的数组也是哈希映射。您可以询问是否存在某些事物(例如,通过它的关键)。使用地图来帮助你。

相关问题