Проблема с вашим:
return count($arr) > 1 ? array_map(null, ...$arr) : $arr;
означает, что вы пропускаете начальную проверку по истине / фальши:
return $arr
// v----------------------------truthy----
? count($arr) == 1 |
? array_chunk($arr[0], 1) |
: array_map(null, ...$arr) |
: $arr; |
// ^----------------------------falsey----
Теперь я не игрок в код, так что я не знаю, считаются ли пробелы, которые вы разместили, символами. Я не знаю, когда в «игровое время» все разбивают свой код, а вы просто делаете нам одолжение, делая код читабельным. Тем не менее, вот пара идей:
function transpose($arr)
{
return $arr
? //count($arr) == 1
//!isset($arr[1]) <-- if spaces "count", this is shorter
//!next($arr) <-- because no 0 in the arrays
@!$arr[1] // <-- the dirty stfu operator
? array_chunk($arr[0], 1)
: array_map(null, ...$arr)
: $arr;
}
Теперь я никогда не использую оператор stfu в своей карьере, но если перчатки сняты, возможно, стоит посмотреть. Демо
Я буду продолжать смотреть на код и звонить, если что-нибудь ударит меня.
Редактировать: Я только что понял, !next($arr)
работает, потому что в примерах данных нет нулей.
На самом деле, почему я играю с отрицанием, переверните все вокруг. Duh!
function transpose($arr)
{
return $arr
? //isset($arr[1]) <-- if spaces "count", this is shorter
//next($arr) <-- because no 0 in the arrays
@$arr[1] // <-- the dirty stfu operator
? array_map(null, ...$arr)
: array_chunk($arr[0], 1)
: $arr;
}