从数组中删除第一个元素(键和值),将其转换为另一个数组

问题描述 投票:0回答:5

我想捕获数组的第一个元素及其在第二个数组中的值,从第一个数组中删除它。

是否有一个核心PHP函数可以完成my_function在这里做的事情?

function my_function(&$array) {
  $key = current(array_keys($array));
  $value = $array[$key];
  unset($array[$key]);
  return [$key => $value];
}
$array = [
  'color' => 'red',
  'car' => 'ford'
  'house' => 'cottage',
];

$top = my_function($array);

print_r($top);
print_r($array);

输出:

Array
(
    [color] => red
)
Array
(
    [car] => ford
    [house] => cottage
)

如果没有核心功能,是否有更简单的方法来实现此行为? IIRC,通过引用传递变量是不受欢迎的。

额外的问题:对于数组中的键和元素的组合是否有一个词?我觉得'元素'不一定包含密钥。

编辑因为似乎存在一个常见的误解,至少在PHP 7中,array_shift没有做出理想的行为。它只返回第一个值,而不是第一个元素:

$ cat first_element.php
<?php

$array = [
  'color' => 'red',
  'car' => 'ford',
  'house' => 'cottage',
];

$top = array_shift($array);

print_r($top);
print_r($array);

$ php first_element.php
redArray
(
    [car] => ford
    [house] => cottage
)
php arrays
5个回答
1
投票

array_splice并不总是保留密钥,所以只需获取密钥并与array_shift的结果结合以删除密钥:

$result = [key($array) => array_shift($array)];

如果需要,重置数组指针:

reset($array) && $result = [key($array) => array_shift($array)];

3
投票

试试这个(array_splice):

$top = array_splice($array, 0, 1);

$top将包含第一个元素,$array将包含其余元素。


0
投票
function my_function($array) {
    $first_key = key($array);
    return array($first_key =>$array[$first_key] );
} 
$array = array(  'color' => 'red', 'car' => 'ford','house' => 'cottage' );

$first = my_function($array);
array_shift($array);print_r($first);print_r($array);

0
投票

我做了这个功能:

function array_extract(array &$array, $num) {
  $output = array_slice($array,0, $num);
  array_splice($array,0, $num);
  return $output;
}

这是它的作用

$ cat test.php
<?php

$test = [234,25,45,78,56];

echo "test:\n";
print_r($test);

while( count($test) ) {
  echo "extraction:\n";
  print_r(array_extract($test, 2));

  echo "\ntest:\n";
  print_r($test);
}

$ php test.php
test:
Array
(
    [0] => 234
    [1] => 25
    [2] => 45
    [3] => 78
    [4] => 56
)
extraction:
Array
(
    [0] => 234
    [1] => 25
)

test:
Array
(
    [0] => 45
    [1] => 78
    [2] => 56
)
extraction:
Array
(
    [0] => 45
    [1] => 78
)

test:
Array
(
    [0] => 56
)
extraction:
Array
(
    [0] => 56
)

test:
Array
(
)

-3
投票

非常简单:

$array1 = [
  'color' => 'red',
  'car' => 'ford'
  'house' => 'cottage',
];
$array2 = array_unshift($array1);

--> result
$array2 = [
   'color' => 'red'
];

$array1 = [
  'car' => 'ford'
  'house' => 'cottage',
];
© www.soinside.com 2019 - 2024. All rights reserved.