Я сделал некоторые изменения в вашем фрагменте, чтобы он работал,
$result = [];
foreach ($temps as $row => $temp) {
if (count($temp) > 2) {
// I am taking a slice of the array except for last element and imploding it with `.`
// then I am fetching the last element of an array
// creating an array and pushing it into the result variable
$result[] = [implode(".", array_slice($temp, 0, count($temp) - 1)), end($temp)];
}else{
$result[] = $temp;
}
}
Я уничтожаю все элементы, кроме последнего, используя array_slice .
end
Я использовалполучить последний элемент массива.
Демо .
РЕДАКТИРОВАТЬ 1
Еще один способ добиться того же,
$result = [];
foreach ($temps as $row => $temp) {
if (count($temp) > 2) {
// except last elements
$result[] = [implode(".", array_slice($temp, 0, -1)), end($temp)];
}else{
$result[] = $temp;
}
}
Демо .
РЕДАКТИРОВАТЬ 2
$result = [];
foreach ($temps as $row => $temp) {
$result[] = (count($temp) > 2 ? [implode(".", array_slice($temp, 0, -1)), end($temp)] : $temp);
}
Демо .
РЕДАКТИРОВАТЬ 3
$result = array_map(function($temp){
return (count($temp) > 2 ? [implode(".", array_slice($temp, 0, -1)), end($temp)] : $temp);
},$temps);
Демо .
РЕДАКТИРОВАТЬ 4 : Без условия
$result = array_map(function($temp){
return [implode(".",array_slice($temp,0,-1)),array_pop($temp)];
},$temps);
РЕДАКТИРОВАТЬ 5
$result = array_map(function($temp){
return [implode(".",array_slice($temp,0,-1)),end($temp)];
},$temps);
Демо .
Вывод :
Array
(
[0] => Array
(
[0] => user.address.detail.name
[1] => family
)
[1] => Array
(
[0] => user
[1] => address
)
[2] => Array
(
[0] => user.address.detail
[1] => name
)
)