【问题标题】:Array_slice() doesn't work as expected on nested arraysArray_slice() 在嵌套数组上不能按预期工作
【发布时间】:2020-06-09 03:13:15
【问题描述】:

所以,我正在设计一个可以通过扩展运算符 (...$arg) 接受多个参数的函数

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

    // 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 arrays multidimensional-array slice


    【解决方案1】:

    您期望数组中的第一个值。 array_slice 返回切片数组。您可以使用 array_shift 代替,它会将数组的第一个值移出并返回。

    print_r(array_shift($arg));
    

    输出:

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

    【讨论】:

    • 谢谢!使用 current($arg) 也可以完成这项工作。
    【解决方案2】:

    它按预期工作。它返回$arg 数组的第一个元素,该数组的键为 0,其中包含一个数组,而不是第一个元素的内容。您只是误解了 array_slice 的实际工作原理。

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

    【讨论】:

    • 啊,我明白了,它总是返回一个数组。我不知道我在想什么......谢谢你的回答
    猜你喜欢
    • 2016-10-11
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 2020-12-14
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多