我有两个数组
$array1 = array('first', 'second', 'third', 'fourth');
$array2 = array('first', 'third', 'fourth', 'fifth', 'sixth');
这2个数组具有共同的项目,其中某些项目仅在array1
或array2
上可用。
我想要做的是创建一个包含2列的表,分别为array1和array2,如下所示:
array1 ----------- array2
first ----------- first
second ----------- second
third ----------- third
fourth ----------- fourth
fifth ----------- fifth
sixth ----------- sixth
但是这里的目的是加粗在各自数组中为每一列找到的项目。
因此,对于array1
,first, second, third, fourth
将为粗体,而在array2
中,first, third, fourth, fifth, sixth
将为粗体。
我搞砸了array_diff
和array_merge
,但不幸的是我陷入了僵局。我想它一定是foreach
,但我找不到它们之间的区别。
请帮忙吗?
答案 0 :(得分:2)
这里有两点:
$arrayOne = array('first', 'second', 'third', 'fourth');
$arrayTwo = array('first', 'third', 'fourth', 'fifth', 'sixth');
// create a unique list
$uniqueValues = array_unique(array_merge($arrayOne, $arrayTwo));
// iterate over and echo a bold or normal value
foreach ($uniqueValues as $value) {
echo in_array($value, $arrayOne) ? "**$value**" : $value, ' - ';
echo in_array($value, $arrayTwo) ? "**$value**" : $value, PHP_EOL;
}
输出:
**first** - **first**
**second** - second
**third** - **third**
**fourth** - **fourth**
fifth - **fifth**
sixth - **sixth**
答案 1 :(得分:2)
array_unique(array_merge())
的组合将为您提供任一数组中存在的每个值。
$array = array_unique(array_merge($array1, $array2));
遍历此结果,在输出表时检查每个值在适当数组中的存在。
假设示例CSS:
.bold {
font-weight: bold;
}
尝试使用此PHP:
echo "<table>\n";
echo "<tr><th>array1</th><th>array2</th></tr>\n";
foreach( $array as $value ){
$class1 = in_array($value, $array1)?"bold":"";
$class2 = in_array($value, $array2)?"bold":"";
echo "<tr><td class='$class1'>$value</td><td class='$class2'>$value</td></tr>\n";
}
echo "</table>\n";
这将在以下代码段中输出html:
.bold {
font-weight: bold;
}
<table>
<tr><th>array1</th><th>array2</th></tr>
<tr><td class='bold'>first</td><td class='bold'>first</td></tr>
<tr><td class='bold'>second</td><td class=''>second</td></tr>
<tr><td class='bold'>third</td><td class='bold'>third</td></tr>
<tr><td class='bold'>fourth</td><td class='bold'>fourth</td></tr>
<tr><td class=''>fifth</td><td class='bold'>fifth</td></tr>
<tr><td class=''>sixth</td><td class='bold'>sixth</td></tr>
</table>
答案 2 :(得分:1)
首先,您必须将两个数组合并为具有所有值的一个大数组,然后对其进行爬网。
合并数组应使用array_merge
或简单的+
操作
在我的解决方案中使用内联条件,如果在第一个数组中为value,则将其附加到bolt元素,否则,仅回显该值。
此外,别忘了将此输出放入table
元素
<?php
$array1 = array('first', 'second', 'third', 'fourth');
$array2 = array('first', 'third', 'fourth', 'fifth', 'sixth');
$merged = $array1 + $array2;
foreach($merged as $value){
echo '<tr>';
echo '<td>'.(in_array($value, $array1)? '<b>'.$value.'</b>' : $value).'</td>';
echo '<td>'.(in_array($value, $array2)? '<b>'.$value.'</b>' : $value).'</td>';
echo '</tr>';
}
答案 3 :(得分:1)
代码
<?php
$array1 = array('first', 'second', 'third', 'fourth');
$array2 = array('first', 'third', 'fourth', 'fifth', 'sixth');
function boldSame(array $one, array $two) : array
{
$results = [];
$allItems = array_unique(array_merge($one, $two));
$i = 0;
foreach ($allItems as $item) {
$results[$i]['value'] = $item;
if (in_array($item, $one) && in_array($item, $two)) {
$results[$i]['bold'] = true;
} else {
$results[$i]['bold'] = false;
}
$i++;
}
return $results;
}
function makeTable(array $values) : string
{
$html = '<table>' . PHP_EOL;
foreach ($values as $value) {
$html .= '<tr>' . PHP_EOL;
$html .= '<td>';
if ($value['bold']) {
$html .= '<strong>';
$html .= $value['value'];
$html .= '</strong>';
} else {
$html .= $value['value'];
}
$html .= '</td>';
$html .= '<td>';
if ($value['bold']) {
$html .= '<strong>';
$html .= $value['value'];
$html .= '</strong>';
} else {
$html .= $value['value'];
}
$html .= '</td>' . PHP_EOL;
$html .= '</tr>' . PHP_EOL;
}
$html .= '</table>' . PHP_EOL;
return $html;
}
echo makeTable(boldSame($array1, $array2));
用法
echo makeTable(boldSame($array1, $array2));
结果
<table>
<tr>
<td><strong>first</strong></td><td><strong>first</strong></td>
</tr>
<tr>
<td>second</td><td>second</td>
</tr>
<tr>
<td><strong>third</strong></td><td><strong>third</strong></td>
</tr>
<tr>
<td><strong>fourth</strong></td><td><strong>fourth</strong></td>
</tr>
<tr>
<td>fifth</td><td>fifth</td>
</tr>
<tr>
<td>sixth</td><td>sixth</td>
</tr>
</table>