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

时间:2017-10-13 16:33:09

标签: php arrays

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

是否有一个核心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
)

5 个答案:

答案 0 :(得分:3)

试试这个(array_splice):

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/qtip2/3.0.3/basic/jquery.qtip.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/qtip2/3.0.3/basic/jquery.qtip.min.css">

<table>
  <tbody>
    <tr>
      <td>
        <span qtip="Tooltip for Name">Customer.Name</span>
      </td>
      <td>
        <span qtip="Tooltip for Address">Customer.Address</span>
      </td>
      <td>
        <span qtip="Tooltip for Phonenumber">Customer.Phonenumber</span>
      </td>
    </tr>
  </tbody>
</table>

$top = array_splice($array, 0, 1); 将包含第一个元素,$top将包含其余元素。

答案 1 :(得分:1)

array_splice并不总是保留密钥,因此只需获取密钥并结合array_shift的结果即可将其删除:

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

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

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

答案 2 :(得分: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);

答案 3 :(得分: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
(
)

答案 4 :(得分:-3)

非常简单:

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

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

$array1 = [
  'car' => 'ford'
  'house' => 'cottage',
];