2013-07-16 41 views
1

我的一些代碼...突出顯示特定的數組中的元素 - PHP

$a_array = array(2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20); 
$b_array = array(2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20); 

$a = $a_array[array_rand($a_array)]; 
$b = $b_array[array_rand($b_array)]; 

$a_multiples = array($a*1, $a*2, $a*3, $a*4, $a*5, $a*6, $a*7, $a*8, $a*9, $a*10); 
$b_multiples = array($b*1, $b*2, $b*3, $b*4, $b*5, $b*6, $b*7, $b*8, $b*9, $b*10); 

$result = array_intersect($a_multiples, $b_multiples); 
$d = reset($result); 

$ d是一個$和$ b的LCM(假設它是在$ a和$第10倍的倍數b)。然後,我列出一個$的第一個10倍的倍數和$ b正是如此...

echo $lista = implode(', ', $a_multiples); 
echo $listb = implode(', ', $b_multiples); 

我怎樣才能「突出」(即放粗體)在$ LISTA的LCM和$數組listB?

+0

使用array_merge(),array_walk功能WIRTE邏輯 –

回答

1

如果你正在使用PHP 5.3或以上,你可以用一個函數來創建一個高亮(關閉),可以傳遞給array_map:

function highlighterGenerator($lcd){ 
     return function ($a) use ($lcd){ 
      return $a == $lcd?"<strong>".$a."</strong>":$a; 
     } 
} 

要使用:

echo implode(", ", array_map(highlighterGenerator($d), $a_multiples)); 
echo implode(", ", array_map(highlighterGenerator($d), $b_multiples)); 

對於老PHP的版本如下解決方案應該是等價的:

function highlighter($arr, $lcd){ 
    $ret = array(); 
    foreach($arr as $val){ 
      $ret[] = $val == $lcd?"<strong>".$val."</strong>":$val; 
    } 
    return $ret; 
} 

使用方法:

echo implode(", ", highlighter($a_multiples, $d)); 
echo implode(", ", highlighter($b_multiples, $d)); 
+0

不工作。我得到了'Parse error:語法錯誤,意外的T_FUNCTION在.....'這是你函數的第二行。錯別字? – gtilflm

+0

這種格式(閉包)需要php 5.3 ...我會更新答案給你一個不同的解決方案。 – Orangepill

+0

太棒了!它現在有效。我也修正了失蹤的結論)修改回聲。謝謝! – gtilflm

1

剛剛嘗試這一點(它的速度更快)

echo "<strong>" . implode("</strong><strong>", $a_multiples) . "</strong>"; 
echo "<strong>" . implode("</strong><strong>", $b_multiples) . "</strong>"; 

DEMO.

+0

好理解其他 –

+1

謝謝,剛剛加入數組''強'和代碼描述自己,我認爲:-) –