使用in_array仅应用一次规则

时间:2011-02-25 16:58:44

标签: php arrays

你好,我想知道如何做以下事情,因为我一直没有回答。所以我会尽量简化。

我为关联数组设置了一些值

$vNArray ['Brandon']  = $item[3]; 
$vNArray['Smith']= $item[4]; 
$vNArray ['Johnson']= $item[5];
$vNArray ['Murphy']= $item[6];
$vNArray ['Lepsky']= $item[7];

foreach ($vNArray as $key => $value){

if(!empty($value)){
   $result  .= "\t\t\t\t<li><strong>$key</strong>"  .$value.   "</li>\n";
}

但是现在我想要定位该数组中的特定值,所以这是另一个数组:

$display_id=array('Brandon', 'Murphy');

foreach ($vNArray as $key => $value){
if(!empty($value)){
   //Looks into the display_id array and renders it differently
   if (in_array($key, $display_id)) {
   $data .= "\t\t<li id=\"".$vNArray['Brandon']."\">".$vNArray['Murphy']."</li>\n";

} else {
$result .= "\t\t\t\t<li><strong>$key</strong>$value</li>\n";
}

}

第一个条件的结果是正确的,但对于两个in_array值重复:

<li id="Brandon Value">Murphy Value</li>
<li id="Brandon Value">Murphy Value</li>

以下是正确的:

<li><strong>Smith</strong> Value of Smith</li>
<li><strong>Smith</strong> Value of Johnson</li>
<li><strong>Lepsky</strong> Value of Lepsky</li>

如何根据阵列数量阻止它重复?

2 个答案:

答案 0 :(得分:1)

$data .= "\t\t<li id=\"".$vNArray['Brandon']."\">".$vNArray['Murphy']."</li>\n";

您已经对vNArray键进行了硬编码,因此无论匹配哪个名称,您始终输出相同的值。你想要

$data .= "\t\t<li id=\"{$key}\">{$value}</li>\n";

代替。

不需要像现在这样进行字符串连接。 PHP可以很好地将数组元素插入到字符串中,并且无需在任何地方转义引号,这意味着可以通过丑陋的代码进行读取。

答案 1 :(得分:0)

仔细看看你的循环。

您正在使用foreach循环,这意味着您每次都要浏览数组。

您的if(in_array(...))条件会检查密钥是否在您的$display_id数组中。对于Brandon和Murphy来说,这种情况发生了两次。

当该条件发生两次时,$ data将被追加两次,这意味着您将获得两次显示的结果。

我不确定这会有什么帮助,但请仔细看看你的循环。你能澄清一下你正在努力实现的目标,或者你想要的产出是什么吗?

祝你好运。

编辑:

我重读了你的问题并意识到了一些事情 - 你只想让你的输出打印一次吗?

查看break语法。在if条件下追加它后,添加一个break;,这将打开循环打印一次。