У меня проблема с foreach
и вложенная arrays
в PHP. Я получаю весь foreach ($var as $newvar)
и такой, но я столкнулся с новым требованием, которое я, похоже, не могу понять/визуализировать. Вот простой вопрос:Проблема с foreach и вложенными массивами
select systems.hostname, capacity_disk.server_id, capacity_disk.disk_mountpoint, capacity_disk.disk_datetime, capacity_disk.disk_device, capacity_disk.disk_capacity, capacity_disk.disk_used, capacity_disk.disk_used_percent from systems left join capacity_disk on systems.id=capacity_disk.server_id where capacity_disk.disk_datetime = UNIX_TIMESTAMP(subdate(current_date,3)) and systems.id=44;
я получаю следующий результат:
+--------------------------------+-----------+-----------------+---------------+----------------------------+---------------+------------+-------------------+
| hostname | server_id | disk_mountpoint | disk_datetime | disk_device | disk_capacity | disk_used | disk_used_percent |
+--------------------------------+-----------+-----------------+---------------+----------------------------+---------------+------------+-------------------+
| server01.example.org | 44 | /backup | 1427950800 | /dev/mapper/storage-backup | 1870561476 | 1437491340 | 81% |
| server01.example.org | 44 |/ | 1427950800 | /dev/mapper/storage-root | 15126920 | 4286048 | 30% |
+--------------------------------+-----------+-----------------+---------------+----------------------------+---------------+------------+-------------------+
2 rows in set (0.01 sec)
Все эти данные, как ожидается, и работает.
Проблема в том, что я не могу понять логику PHP для запуска foreach для каждого из имен хостов, а затем повторить через каждый из disk_mountpoint
. Очевидно, что первая часть легко:
$query = $db->Execute("select systems.hostname, capacity_disk.server_id, capacity_disk.disk_mountpoint, capacity_disk.disk_datetime, capacity_disk.disk_device, capacity_disk.disk_capacity, capacity_disk.disk_used, capacity_disk.disk_used_percent from systems left join capacity_disk on systems.id=capacity_disk.server_id where capacity_disk.disk_datetime = UNIX_TIMESTAMP(subdate(current_date,3)) and systems.id=44;");
foreach ($query as $server) {
}
На данный момент я мог бы сослаться на имя хоста через $server['hostname']
- что опять-таки хорошо. Проблема в том, что для каждого из $server['hostname']
элементов (1 сервер в этом наборе результатов, но 2 элемента, которые я хотел бы также пропустить), я хотел бы перебирать два disk_mountpoint
и иметь возможность управлять данными в строка таблицы в базе данных. Другой улов в том, что я должен быть в состоянии сообщить все мои вещи и вернуть то, что в формате:
'`disk_mountpoint`','`disk_capacity`','`disk_used_percent`'
Таким образом, выходной образец для двух элементов будет что-то вдоль линий:
'/backup','1870561476','81%'
'/','15126920','30%'
Я никогда не делал этого на PHP и с трудом выяснял, как поместить логику в код.
Это позволит мне сосредоточиться на одном 'hostname', но не позволяет мне работать с несколькими строками на основе одного и того же имени хоста. Я не уверен, как управлять несколькими элементами для одного имени хоста, как я объяснил выше. Есть идеи? – drewrockshard
Я обновил первый пример кода, чтобы показать второй цикл для строк внутри одного хоста. Это то, что тебе надо? Если нет, возможно, вы можете включить больше своего кода, чтобы показать, что вы пытаетесь с каждой группой строк для отдельного хоста. – theark40