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 に答える