无法理解的条件和功能的错误操作

Incomprehensible condition and incorrect operation of the function

有以下代码(demo here),函数(带递归)以螺旋方式收集值的矩阵:

function spiralmatrix($arr)
{
    return  $arr 
            ? array_merge(
                    array_shift($arr), 
                    spiralmatrix(array_reverse(transpose($arr)))
            )
            : $arr;
}

function transpose($arr)
{ 
    return $arr
            ? count($arr) == 1
                ? array_chunk($arr[0], 1) 
                : array_map(null, ...$arr)
            : $arr;
}

我知道使用多个三元表达式会导致代码不可读。但是代码高尔夫有更主要的运动兴趣。

所以,对于这个问题,是否可以通过某种方式改变条件来剪切更多的字符?可以使用任何方法。

我也想问一下,奇怪的是下面可以正常工作(demo):

function transpose($arr)
{ 
    return $arr
            ? count($arr) == 1
                ? array_chunk($arr[0], 1) 
                : array_map(null, ...$arr)
            : $arr;
}

表达式有点错误 (demo):

function transpose($arr)
{ 
    return count($arr) > 1 ? array_map(null, ...$arr) : $arr; 
}

虽然,在单独的测试中(不是在这个函数中 spiralmatrix),它们显示相同的结果,这个问题可能是什么? (demo comparisons)。感谢您的帮助..

你的问题:

return count($arr) > 1 ? array_map(null, ...$arr) : $arr;

是你忽略了truthy/falsey初始检查:

return $arr
//      v----------------------------truthy----
        ? count($arr) == 1                    |
            ? array_chunk($arr[0], 1)         |
            : array_map(null, ...$arr)        |
        : $arr;                               |
//      ^----------------------------falsey----

现在,我不是代码高尔夫球手,所以我不知道您张贴的空格 "count" 是否为字符。我不知道 "game time" 时是否每个人都把他们的代码搞砸了,你只是在帮我们一个忙,让代码更易读。也就是说,这里有几个想法:

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 运算符,但如果手套脱落,也许值得一看。 Demo

我会一直盯着代码看,如果有任何问题,我会插话。

编辑:我刚刚意识到 !next($arr) 有效,因为示例数据中没有零。

其实,我为什么要玩否定,颠倒一切。呸!

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;
}