Используйте ниже код: -
$result = [];
foreach($MainArray as $record){
$result[$record['Machine_Name']][] = $record;
}
echo '<pre>'; print_r($result);
вывод: -
Array
(
[Machine1] => Array
(
[0] => Array
(
[Job_Name] => WXYZ
[Quantity] => 1000
[Start_Date] => 2014-07-30 00:00:00
[Completion_Date] => 2014-08-02 00:00:00
[Labor] => 4
)
[1] => Array
(
[Job_Name] => BCDA
[Quantity] => 1200
[Start_Date] => 2014-08-02 00:00:00
[Completion_Date] => 2014-08-07 00:00:00
[Labor] => 1
)
)
[Machine2] => Array
(
[0] => Array
(
[Job_Name] => ABCD
[Quantity] => 1500
[Machine_Name] => Machine2
[Start_Date] => 2014-08-08 00:00:00
[Completion_Date] => 2014-08-14 00:00:00
[Labor] => 2
)
)
)
@ Комментарий Эндрю Хенле был правильным ответом:
Да, вы делаете что-то не так: вы вызываете неопределенное поведение, вызывая не асинхронно безопасные для сигнала функции из сигнала. обработчик. В отсутствие конкретной документации, поддерживающей вызов функции, такой как список асинхронно-безопасных функций POSIX, вы действительно не можете делать какие-либо вызовы из обработчика сигнала. В сноске 188 стандарта C даже говорится: «Таким образом, обработчик сигнала в общем случае не может вызывать функции стандартной библиотеки». POSIX предоставляет список функций, которые безопасно вызывать - в POSIX. Все остальное - неопределенное поведение.
blockquote>Ранее он дал более подробный ответ на этот вопрос здесь: https://stackoverflow.com/a/34553070/5251867
РЕДАКТИРОВАТЬ:
[ 1114] Рассматривая доступные функции, кажется, что есть два пути, которыми можно следовать.
- используют
open
,write
,close
, чтобы удалить файл с соответствующей информацией о сигнале, который был пойман, и обработать этот файл позже (при перезапуске приложения или из другой службы, которая контролирует это). файл изменений)- используют
connect
,bind
,send
для отправки подробностей через сокет в какой-то другой процессЯ думаю, что оба они технически IPC, поскольку оба являются средством, позволяющим другому процессу получить доступ к информации, которую там размещает обработчик сигналов. Передача этой информации другому процессу, где вы можете что-то сделать с этой информацией, кажется единственным подходящим способом продвинуться вперед.