0

我正在努力在 foreach 语句中输出公司列表。为了比较每个公司的第一个字母,我将替换每个公司的第一个字符。这些需要通过 if 比较器操作发送,以查看它是否是每个初始字符范围的第一次出现。var_dump 显示 srt_cmp 已找到预期的值。当我在多个组合的 if 比较中使用该值时,if 语句将不会执行。

  <?php
  $stringCompanyListing = '<!-- beginning of business listing -->'."\n";
  $countCompanies=0;
  $haveStrungAD = "";
  $haveStrungEI = "";
  $haveStrungJO = "";
  $haveStrungPU = "";
  $haveStrungVZ = "";

  foreach ($files as $file){
    $company = new SimpleXMLElement($file, 0, true); 
    $COMPANYKEY[$countCompanies] = basename($file, '.xml');
  if ($countCompanies >= 1){
    $currentCompany = substr($COMPANYKEY[$countCompanies],0, 1);
    $previousCompany = substr(($COMPANYKEY[($countCompanies-1)]),0, 1);
  $checkForNavigation = strcmp($previousCompany, $currentCompany);
// var_dump at this point show intended values such as "A" and "-1"

  if ($haveStrungAD == ""){
    if ($currentCompany == range("A", "D")){
      if ($checkForNavigation <= -1){
        $stringCompanyListing .= '    <div class="categoryHeading"><a name="atod"></a>A-D</div>'; 
        $haveStrungAD = "done";
      }
        }
          }
  if ($haveStrungEI == ""){
    if ($currentCompany == range("E", "I")){
      if ($checkForNavigation <= -1){
        $stringCompanyListing .= '    <div class="categoryHeading"><a name="etoi"></a>E-I</div>'; 
        $haveStrungEI = "done";
      }
    }
  }
// more if comparisons omitted
}
$countCompanies++;
}
4

1 回答 1

0

由于您在数组 ($COMPANYKEY) 中拥有所有公司名称,您不能只使用 usort () 或 uasort() 对数组进行排序(取决于您是否需要将键保持附加到值)。然后循环遍历数组并将公司分配给适当的数组。例如,

uasort($COMPANYKEY, function ($a, $b) {
return $a < $b;
});
foreach ($COMPANYKEY AS $comp)
{
$char = substr($comp, 0, 1); //get first letter
if ($char <= 'd')
    $atod[] = $comp;
elseif ($char > 'd' && $char <= 'm')
    $etom[] = $comp;    
}

您可以编写附加条件以将其加载到公司中的附加数组中,也可以在 $char 上使用 switch 语句并编写一堆案例。无论哪种方式,这都应该加载每个。

此外,如果您正在使用您的代码,则无需使用 == 运算符并使用 inarray() 函数。range 返回一个值数组,因此您需要检查您的值是否是该数组,而不是等于数组。

希望这可以帮助。

于 2012-09-16T00:53:15.567 回答