Это даст вам желаемый результат!
$arrayItems = [
[
"StartTime" => "00:00:00",
"type" => 1,
"DateAppointment" => "2019-02-24",
"SDay" => "Sun"
],
[
"StartTime" => "00:00:00",
"type" => 1,
"DateAppointment" => "2019-02-25",
"SDay" => "Mon",
],
[
"StartTime" => "00:00:00",
"type" => 1,
"DateAppointment" => "2019-02-26",
"SDay" => "Tue"
],
[
"StartTime" => "00:10:00",
"type" => 1,
"DateAppointment" => "2019-02-24",
"SDay" => "Sun"
]
];
$mergedArray = [];
$i = 0;
foreach($arrayItems as $arrayItem) {
$keys = array_keys($arrayItem);
foreach($keys as $key){
if(array_key_exists($key, $mergedArray[$arrayItem["StartTime"]])){
$newkey = $key.$i;
$mergedArray[$arrayItem["StartTime"]][$newkey] = $arrayItem[$key];
}
else{
$mergedArray[$arrayItem["StartTime"]][$key] = $arrayItem[$key];
}
}
$i++;
}
echo '<pre>';
var_dump($mergedArray);
Вы можете обернуть указатель функции в структуру:
struct fnptr_struct;
typedef void (*fnptr)(struct fnptr_struct *);
struct fnptr_struct {
fnptr fp;
};
Я не уверен, является ли это улучшением при приведении. Я подозреваю, что это невозможно без структуры, потому что C требует, чтобы типы были определены до их использования, и нет непрозрачного синтаксиса для typedef.
Это невозможно сделать напрямую. Ваши единственные варианты - заставить аргумент указателя функции принимать неопределенные аргументы или указатель на структуру, содержащую указатель функции, как предложил Дейв .
// Define fnptr as a pointer to a function returning void, and which takes one
// argument of type 'pointer to a function returning void and taking
// an unspecified number of parameters of unspecified types'
typedef void (*fnptr)(void (*)());