Array_slice() 在嵌套数组上无法按预期工作

Array_slice() doesn't work as expected on nested arrays

提问人:Gergely Lukacsy 提问时间:2/25/2020 最后编辑:JosephGergely Lukacsy 更新时间:2/25/2020 访问量:418

问:

因此,我正在设计一个可以通过扩展运算符(...$arg)

但它也可以采用一个简单的输入数组。 我想访问该方法的第一个元素,但它无法按预期工作:arrayarray_slice()

    // This is what the spread argument passes into the function if it gets a single array
    $arg = [
      ['value1', 'value2', 'valueN'],  
    ];

    // Accessing first element via array_slice:
    var_export( array_slice($arg, 0, 1) );

预期结果:

     array (
       0 => 'value1',
       1 => 'value2',
       2 => 'valueN',
     )

结果基本上等于输入数组:

    array (
      0 => 
      array (
        0 => 'value1',
        1 => 'value2',
        2 => 'valueN',
      ),
    )

我知道我可以简单地访问元素 () 来获取第一项,但我很好奇为什么不能像我预期的那样工作。我在这里错过了什么?0th$arg[0]array_slice()

PHP 维数组 切片

评论


答:

1赞 Alexandre Elshobokshy 2/25/2020 #1

它按预期工作。它返回数组的第一个元素,即键为 0 的数组,它本身包含一个数组,而不是第一个元素的内容。你只是误解了array_slice的实际工作方式。$arg

array (
  0 => 
  array (
    0 => 'value1',
    1 => 'value2',
    2 => 'valueN',
  ),
)

评论

0赞 Gergely Lukacsy 2/25/2020
啊,我现在明白了,它总是返回一个数组。我不知道我在想什么......谢谢你的回答
2赞 Vaibhav Gidde 2/25/2020 #2

您需要从数组中获得第一个值。array_slice返回切片数组。您可以改用 array_shift,它将移出数组的第一个值并返回它。

print_r(array_shift($arg));

输出:

array (
       0 => 'value1',
       1 => 'value2',
       2 => 'valueN',
     )

评论

0赞 Gergely Lukacsy 2/26/2020
谢谢!使用也可以完成这项工作。current($arg)