Задать вопрос
ImpAnonym
@ImpAnonym
Lorem ipsum dolor sit amet

Как правильно сделать обход массива в foreach для создания таблицы (php)?

В общем есть два массива. Массив номеров телефонов и людей.
У массива "люди", есть свойство "ID номера телефона".
У массива "номера телефонов" есть свойство "ID", которое и связано со свойством массива "люди".

Пример PHP кода:
PHP

<!DOCTYPE html>
<html>
<head>
    <title>

    </title>
</head>
<body>
<?php
$peoples = [
        0 => [
            'ID' => '0',
            'PHONE_NUMBER_ID' => '10'
        ],
        1 => [
            'ID' => '1',
            'PHONE_NUMBER_ID' => '9'
        ],
        2 => [
            'ID' => '2',
            'PHONE_NUMBER_ID' => '8'
        ],
        3 => [
            'ID' => '3',
            'PHONE_NUMBER_ID' => '7'
        ],
        4 => [
            'ID' => '4',
            'PHONE_NUMBER_ID' => '6'
        ]
];
$phoneNumbers = [
        0 => [
            'ID' => '6',
            'PHONE' => '79888888886'
        ],
        1 => [
            'ID' => '7',
            'PHONE' => '79888888887'
        ],
        2 => [
            'ID' => '8',
            'PHONE' => '79888888888'
        ],
        3 => [
            'ID' => '9',
            'PHONE' => '79888888889'
        ],
        4 => [
            'ID' => '10',
            'PHONE' => '79888888880'
        ]
];
echo '<table border="1">';
echo '<thead>';
echo '<tr>';
echo '<th>Люди</th>';
echo '<th>Номера телефонов</th>';
echo '</tr>';
echo '</thead>';
echo '<tbody>';
foreach ($peoples as $peopleProp) {
    echo '<tr>';
    echo '<td>' . $peopleProp['ID'] . '</td>';
    foreach ($phoneNumbers as $pnProps) {
        if ($peopleProp['PHONE_NUMBER_ID'] == $pnProps['ID']) {
            echo '<td>Номер телефона ' . $pnProps['PHONE'] . '</td>';
        } else {
            echo '<td> - </td>';
        }
    }
    echo '</tr>';
}
echo '</tbody>';
echo '</table>';
?>


</body>
</html>


Результат:
5f3bbd4e25c71482802135.png

То есть в моём случае если выведет номер телефона и прочерк. Если ещё третий номер телефона добавить, которые не совпадает по ID ни с одним из массива людей, то выведется три прочерка.

Пробовал break использовать, но если в if поставить, то всё равно else несколько раз сработает пока условие if не выполнится, в else если поставить, то он при первом несовпадении перестанет проходить массив, а у нас дальше по массиву есть совпадение. Если и туда и туда вставить, то опять в случае как с else всё сломается, дальше не пойдёт.
  • Вопрос задан
  • 201 просмотр
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
ImpAnonym
@ImpAnonym Автор вопроса
Lorem ipsum dolor sit amet
В общем решил проблему сам. Сделал так foreach:
foreach ($peoples as $peopleProp) {
    $count = 0;
    echo '<tr>';
    echo '<td>' . $peopleProp['ID'] . '</td>';
    foreach ($phoneNumbers as $pnProps) {
        if ($peopleProp['PHONE_NUMBER_ID'] == $pnProps['ID']) {
            $count++;
            echo '<td>Номер телефона ' . $pnProps['PHONE'] . '</td>';
        }
    }
    if ($count == 0) {
        echo '<td> - </td>';
    }
    echo '</tr>';
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
Stalker_RED
@Stalker_RED
SELECT 
  `users`.`id`,
  `users`.`name`,
  `phones`.`number`
FROM `users`
LEFT JOIN `phones` ON `users`.`PHONE_NUMBER_ID` = `phones`.`ID`
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
$a = array(
	'0'=> array(
		'id'=>1, 
		'name'=>'Ivan'
		)
);


$b = array(
	'0'=> array(
		'id'=>1, 
		'phone'=>'0000000',
		'user_id'=>1,
		)
);

foreach($a as $item){
	
	foreach($b as $phones){
		
			if (in_array($item['id'], $phones)){
			echo $item['name'] . '-' . $phones['phone'];
		}
	
	
	};
}

5f3bc3a342407358323249.jpeg
Ответ написан
@Denis00211
Пример:
$userdb = [
[
"uid" => '100',
"name" => 'Sandra Shush',
"url" => 'urlof100',
],
[
"uid" => '5465',
"name" => 'Stefanie Mcmohn',
"pic_square" => 'urlof100',
],
[
"uid" => '40489',
"name" => 'Michael',
"pic_square" => 'urlof40489',
]
];

$key = array_search(40489, array_column($userdb, 'uid'));


Получаешь ключ и выводишь в таком виде


foreach ($peoples as $peopleProp) {
echo '';
echo '' . $peopleProp['ID'] . '';
$key = array_search($people['PHONE_NUMBER_ID'], array_column($userDb, 'id'));
if($key !== false) {
echo 'Номер телефона ' . $phoneNumbers[$key]['PHONE'] . '';

} else {
echo ' - ';
}

echo '';
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы