我想捕获数组的第一个元素及其在第二个数组中的值,从第一个数组中删除它。
是否有一个核心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
)
array_splice
并不总是保留密钥,所以只需获取密钥并与array_shift
的结果结合以删除密钥:
$result = [key($array) => array_shift($array)];
如果需要,重置数组指针:
reset($array) && $result = [key($array) => array_shift($array)];
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);
我做了这个功能:
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
(
)
非常简单:
$array1 = [
'color' => 'red',
'car' => 'ford'
'house' => 'cottage',
];
$array2 = array_unshift($array1);
--> result
$array2 = [
'color' => 'red'
];
$array1 = [
'car' => 'ford'
'house' => 'cottage',
];