0

我有一个数组,如果找到特定字符串,我正在尝试更改输出。

正如您在下面看到的那样,当条件发生时,它成功地将 Upper Captiva 更改为 Captiva,但我的 else 语句被忽略,如果条件不发生,它应该只显示 $row['SUBDIVISION'] 值。

我尝试将 $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);
?>

另一种更优雅的方法是使用 PHP 提供的无数数组函数中的一些。例如,如果您只想输出不同的代码并通过另一个数组过滤它们,您可以使用array_flip() on$mycodes将值转换为键。之后,您可以使用array_intersect_key()仅过滤也存在于$arr. 这样,您可以在一行中表达整个循环及其输出:

<?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 回答