Задать вопрос
LikeMySoul
@LikeMySoul
Сис. Админ

Как вывести только нужные параметры из массива в PHP?

Я написал простенький PHP curl парсер информации по файлам с регистратора Dahua, но данные которые он собирает очень объемные и по сути все параметры кроме двух бесполезные. Получает данные он массивом
в виде
Array
(
[0] => Main
[1] => 0
[2] => dav
[3] => 2022-05-23 08:42:36
[4] => 2022-05-23 08:43:13
[5] => 10
[6] => 2
[7] => 509063
[8] => /mnt/dvr/2022-05-23/0/dav/08/1/2/509063/08.42.36-08.43.13[M][0@0][0].dav
[9] => 17301504
[10] => Event
[11] => VideoMotion
[12] => 17301504

я понял как получать с него данные по ключу. Например: echo print_r($array[3], true); , но тк данных прилетает больше 1000 ключей - я не понимаю как получить с него только дату в виде
yyyy-mm-dd hh:mm:ss
без ввода ключа элемента.
Собственно вопрос в этом и заключается: как вывести из всего массива только даты и время?
Если понадобиться то вот сам
код
function digestAuth($url, $code = false) 
{
   $ch = curl_init($url);
   curl_setopt_array($ch, [CURLOPT_USERPWD => "$login:$password", CURLOPT_CONNECTTIMEOUT => 15, CURLOPT_RETURNTRANSFER => 1, CURLOPT_HTTPAUTH=>CURLAUTH_ANY]);
   $res = curl_exec($ch);
   if ($code) return curl_getinfo($ch, CURLINFO_HTTP_CODE);
   return $res;
}

$firstreq = digestAuth("http://$login:$password@$url/cgi-bin/mediaFileFind.cgi?action=factory.create");
$id = explode("=",trim($firstreq));
$reqStat = trim(digestAuth("http://$login:$password@$url/cgi-bin/mediaFileFind.cgi?action=findFile&object={$id[1]}&condition.Channel=1&condition.StartTime=$start&condition.EndTime=$end&condition.Types[0]=dav"));
$secreq = digestAuth("http://$login:$password@$url/cgi-bin/mediaFileFind.cgi?action=findNextFile&object={$id[1]}&count=1024");

preg_match_all("/items[[\d]+]\.[^=]+=([^s]+)\s/", $secreq, $m);
echo "<pre>0 = ";
echo print_r($m, true);
echo "</pre>";

PS в php я - полный ноль, взялся только потому что не хочу каждый день проверять 100+ регистраторов по 16 камер вручную(
  • Вопрос задан
  • 154 просмотра
Подписаться 1 Средний 4 комментария
Решения вопроса 1
@Dr03d
Если использовать такой код,
$secreq = <<<EOL
found=100
items[0].Type=dav
items[0].StartTime=2022-05-23 08:42:36
items[0].EndTime=2022-05-23 08:43:13
items[0].Disk=10
items[0].Partition=2
items[1].Type=dav
items[1].StartTime=2022-05-23 08:44:05
items[1].EndTime=2022-05-23 08:44:26
items[1].Disk=10
items[1].Partition=2
items[12].Type=dav
items[12].StartTime=2022-05-23 08:44:05
items[12].EndTime=2022-05-23 08:44:26
items[12].Disk=10
items[12].Partition=2
EOL;
preg_match_all('{items\[\d+\]\.StartTime=(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})}', $secreq, $mathes, PREG_SET_ORDER);
print_r($mathes);

то получится такой результат...
Array
(
    [0] => Array
        (
            [0] => items[0].StartTime=2022-05-23 08:42:36
            [1] => 2022-05-23 08:42:36
        )
    [1] => Array
        (
            [0] => items[1].StartTime=2022-05-23 08:44:05
            [1] => 2022-05-23 08:44:05
        )
    [2] => Array
        (
            [0] => items[12].StartTime=2022-05-23 08:44:05
            [1] => 2022-05-23 08:44:05
        )
)

Использование:
$mathes[$x][1]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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