Array_slice () не работает должным образом на вложенных массивах - PullRequest
0 голосов
/ 25 февраля 2020

Итак, я проектировал функцию, которая может принимать несколько аргументов через оператор распространения (...$arg)

, но она также может принимать простой входной массив. Я хочу получить доступ к первому элементу array с помощью метода array_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() не работает, как я ожидал. Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вы ожидаете первое значение из вашего массива. array_slice возвращает нарезанный массив. Вместо этого вы можете использовать array_shift, который сместит первое значение массива и вернет его.

print_r(array_shift($arg));

Вывод:

array (
       0 => 'value1',
       1 => 'value2',
       2 => 'valueN',
     )
1 голос
/ 25 февраля 2020

Работает как положено. Он возвращает первый элемент вашего $arg массива, который представляет собой массив с ключом 0, содержащий сам массив, а не содержимое первого элемента. Вы просто не понимаете, как работает array_slice.

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