loops — объединить php arrey по действию url получить запрос

У меня есть IP-телефон, который через 2 URL-адреса действия делает запрос на получение моего веб-сервера.

URL действия:

http://192.168.25.126/action.php?ID=$call_id&remote=$display_remote
http://192.168.25.126/action.php?ID=$call_id&extension=$active_user

192.168.25.126 это веб-сервер

action.php печатает в лог файл запрос

$call_id это уникальный идентификатор, который телефон дает текущему сеансу

$remote номер звонящего

$extension это добавочный номер IP-телефона

на стороне сервера у меня есть action.php который печатает в лог-файл запросы через эту простую строку

 <?php
file_put_contents("/tmp/post.log",print_r($_GET,true), FILE_APPEND));
?>

проверяя журнал я могу просмотреть ожидаемый запрос

tail -f /tmp/post.log
Array
(
[ID] => 9
[remote] => +39123456789
)
Array
(
[ID] => 9
[extension] => 235
)

Как я могу объединить в tmp.log массивы с таким же идентификатором, как это?

Array
(
[ID] => 9
[remote] => +39123456789
[extension] => 235
)

обратите внимание, что первый arrey генерируется при событии звонка, а второй arrey генерируется, когда я снимаю трубку (или, лучше сказать, при поступлении вызова), поэтому во второй момент
Я не могу сделать это только с одним действием URL, как это

http://192.168.25.126/action.php?ID=$call_id&remote=$display_remote&extension=$active_user

Из-за ограничения моего IP-телефона, поэтому я должен объединить 2 массива. и, если возможно, я хотел бы, но это не является действительно необходимым, чтобы журнал печатался только в том случае, если существует первый массив с таким же идентификатором (поэтому журнал будет отображаться только при ответе на входящий вызов, а не при выполнении вызова).
Я старший ИТ-специалист, а не php-кодер, поэтому просто хочу предложить написать цикл .. большое спасибо

0

Решение

Из того, что я понимаю, это должно делать то, что вам нужно — ожидать, что идентификаторы будут уникальными.

<?php
// get data from log
$fileData = file_get_contents("/tmp/post.log");
$data = json_decode($fileData, true);  // make an array out of the json
// $data will now be something like this:
# $data = [["ID" => 9,"remote" => "+39123456789"],["ID" => 10,"remote" => "+41123456789"]];

// mocking input data
# $_GET = ['ID' => 10, 'otherparam' => 'bar'];

$key = array_search($_GET['ID'], array_column($data, 'ID')); // search for pre-saved data
if($key) {   // an item with $ID was found -> merge new data
$item = array_merge($data[$key], $_GET);
$data[$key] = $item;  // overwrite existing item with this ID
} else {
$item = $_GET;  // create a new item, since we haven't found one
$data[] = $item; // append to data

}
file_put_contents("/tmp/post.log",json_encode($data,true))); // don't append, write the whole dataset

Если идентификаторы не уникальны, мы могли бы просто взять последний добавленный (с помощью end (), проверить, совпадают ли идентификаторы и объединиться там:

end($data); // set pointer to the end
$key = key($data); // get the key of the last element
if($data[$key]['ID']==$_GET['ID']) {
$item = array_merge($data[$key], $_GET); // merge old and new data
$data[$key] = $item; // overwrite item
}

РЕДАКТИРОВАТЬ:
Если вам нужен только последний вызов, нам не нужно повторно сохранять несовпадающие массивы, поэтому этот адаптированный код должен сделать:

<?php
$fileData = file_get_contents("/tmp/post.log");
$data = json_decode($fileData, true);
// $data will now be something like this:
# $data = ["ID" => 9,"remote" => "+39123456789"]; // note, this time it's a one-dimentional (but assoc) array.
// mocking input data
# $_GET = ['ID' => 9, 'otherparam' => 'bar'];

// check if we have pre-saved data, that has an 'ID' and that matches our current one:
if(is_array($data) && isset($data['ID']) && $data['ID']==$_GET['ID']) {   // the saved $ID was found -> merge new data
$data = array_merge($data, $_GET);
} else {
$data = $_GET;  // create a new item, since we haven't found one
}
file_put_contents("/tmp/post.log",json_encode($data,true))); // don't append, write the whole dataset

Отказ от ответственности: Этот код не проверяет ошибки вообще и выдает ошибки в пустой журнал (потому что json_decode потерпит неудачу, если данных пока нет), имеет некоторые проблемы с безопасностью (использование $ПОЛУЧИТЬ без очистки и записи этого в файл …), не проверяет правильность ввода (что делать, если идентификатор не отправляется) и т. Д …

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]