0

特定の文字列が見つかった場合に出力を変更しようとしている配列があります。

以下に示すように、条件が発生すると、Upper CaptivaがCaptivaに正常に変更されますが、条件が発生しない場合は$row['SUBDIVISION']値を表示する必要があるelseステートメントは無視されます。

$mycodesと$row['SUBDIVISION']をelse行に追加しようとしましたが運がありませんでした。

<?php
    $mycodes = explode(",", $row['SUBDIVISION']);
    $arr = array(   "Upper Captiva" => "Captiva",);
    $printedsomething=0;
    foreach($mycodes as $code) {
        if ($arr[$code] != '' ) {
            if ($printedsomething==1)  echo ", " . $arr[$code];
            else echo $mycodes;
            $printedsomething=1;
        }
    }  //end for loop
?>
4

1 に答える 1

1

これは、コメントで求めたコード例です。これがうまくいかない場合は、この回答を削除できるようにお知らせください。

<?php
  $mycodes = explode(',', $row['SUBDIVISION']);
  $arr = array('Upper Captiva' => 'Captiva');

  $printedsomething = false;

  foreach($mycodes as $code) {
    if ( !empty($arr[$code]) ) {
      /*******************************
      * This would be your original code refactored.
        $mycodes should probably be $arr[$code]     */

      echo $printedsomething ? ', ' . $arr[$code] : $mycodes;

      /*******************************/
      $printedsomething = true;
    }
  }  //end for loop
?>

しかし、私はこれがあなたが望むものだとは思いません。私が理解している限り、コードのいずれかがに含まれているかどうかを確認$arrし、含まれている場合は、コンマで区切ってエコーアウトします。

配列をエコーアウトできないという事実($mycodes)(そこに出力したかったと思います$arr[$code])に加えて、おそらくもっと洗練された方法があります。それは、ループの前に空の結果配列を定義することです。

$results = array();

次に、関連する値をそこに入れることができるので、星の間のコードは次のようになります。

$results[] = $arr[$code];

したがって、ループの後にこれを行うことができます。

implode(', ', $results);

したがって、最終的なコードは次のようになります。

<?php
  $mycodes = explode(',', $row['SUBDIVISION']);
  $arr = array('Upper Captiva' => 'Captiva');

  $results = array();    

  foreach($mycodes as $code) {
    if ( !empty($arr[$code]) ) {
       $results[] = $arr[$code];
    }
  }

  echo implode(', ', $results);
?>

もう1つの、さらに洗練されたアプローチは、PHPが提供する無数の配列関数のいくつかを使用することです。たとえば、個別のコードのみを出力し、それらを別の配列でフィルタリングする場合は、array_flip()を使用$mycodesして値をキーに変換できます。その後、array_intersect_key()を使用して、に存在するキーのみをフィルタリングできます$arr。このようにして、ループ全体とその出力を1行で表すことができます。

<?php
  $mycodes = explode(',', $row['SUBDIVISION']);
  $arr = array('Upper Captiva' => 'Captiva');

  echo implode(', ', array_intersect_key($arr, array_flip($mycodes)));
?>

あなたのアレイがどのように見えるか正確にはわからないので、これがあなたのために働くかどうかはわかりません。また、これがあなたの要件を満たしているかどうかもわかりません。

于 2013-02-03T11:20:00.240 に答える