你好,我想知道如何做以下事情,因为我一直没有回答。所以我会尽量简化。
我为关联数组设置了一些值
$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>
如何根据阵列数量阻止它重复?
答案 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;
,这将打开循环打印一次。