#php
#php
Вопрос:
У меня есть два массива
$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
, но я не могу найти различий.
Любая помощь, пожалуйста?
Комментарии:
1. Почему
second
помещается во вторую строку таблицы, зная, чтоthird
во втором массиве индекс тот же, что иsecond
в первом массиве.2. @revo я думаю создать объединенный вывод обоих массивов, возможно, мой вывод в вопросе неверен…
3. То есть порядок не обязательно имеет значение?
4. @revo да, порядок не обязательно имеет значение
Ответ №1:
Здесь два момента:
- Создайте уникальный массив из всех значений
- Если значение существует в массиве, выделите формат жирным шрифтом, в противном случае выведите его как есть:
$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**
Ответ №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>
Ответ №3:
Сначала вы должны объединить оба массива в один большой со всеми значениями, затем выполнить сканирование по нему.
Объединение массивов должно выполняться с помощью array_merge
или простой
операции
В моем решении используется встроенное условие, если есть значение в первом массиве, добавьте его к элементу 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>';
}
Комментарии:
1. Привет, я не думаю, что это ответ. Причина этого в том, что даже 2-й столбец для array2 учитывает элементы в array1, array1 не учитывает элементы array2. Итак, если элемент отображается только в array2, то array1 должен отображать его без выделения жирным шрифтом.
2.Я запустить этот код, и результат был, как и ваш описание: первый первый второй второй третий третий четвертого , четвертый , шестой шестой
Ответ №4:
Код
<?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) amp;amp; 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>