合并两个数组的输出项,并突出显示它们各自的项

时间:2019-03-31 17:48:42

标签: php

我有两个数组

$array1 = array('first', 'second', 'third', 'fourth');
$array2 = array('first', 'third', 'fourth', 'fifth', 'sixth');

这2个数组具有共同的项目,其中某些项目仅在array1array2上可用。

我想要做的是创建一个包含2列的表,分别为array1和array2,如下所示:

array1 ----------- array2
first ----------- first
second ----------- second
third ----------- third
fourth ----------- fourth
fifth ----------- fifth
sixth ----------- sixth

但是这里的目的是加粗在各自数组中为每一列找到的项目。

因此,对于array1first, second, third, fourth将为粗体,而在array2中,first, third, fourth, fifth, sixth将为粗体。

我搞砸了array_diffarray_merge,但不幸的是我陷入了僵局。我想它一定是foreach,但我找不到它们之间的区别。

请帮忙吗?

4 个答案:

答案 0 :(得分:2)

这里有两点:

  1. 从所有值创建唯一的数组
  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>