弹出钥匙&来自PHP中的关联数组的值

时间:2011-07-07 10:09:32

标签: php associative-array

设S是PHP中的关联数组,我需要检索并从中提取第一个元素,包括值和键。

我会用

value1=array_pop(S);

但它只给了我价值。

我可以用

K=array_keys(S);
key1=array_pop(K);
value1=array_pop(S);

但它很复杂,因为它需要有两份相同的数据。由于数组本身是数组数组中的元素,因此令人困惑。在提取它时,必须有一种更优雅的方式来读取几个键/值。

4 个答案:

答案 0 :(得分:37)

$value = reset($arr);
$key = key($arr);

(按此顺序)

reset() PHP Manualkey() PHP Manual

unset($arr[$key]); # in case you want to remove it.

但是array_pop() PHP Manual正在使用最后一个元素:

$value = end($arr);
$key = key($arr);
unset($arr[$key]); # in case you want to remove it.

请参阅end() PHP Manual

为了好玩:

list($value, $key) = array(end($arr), key($arr));

extract(array('value'=>end($arr), 'key'=>key($arr)));

end($arr);
list($key, $value) = each($arr);

或者你喜欢的任何风格;)

处理空数组

到目前为止,它缺少处理空数组。因此需要检查是否存在最后(第一个)元素,如果没有,则将$key设置为null(因为null不能是数组键):

for($key=null;$key===null&&false!==$value=end($arr);)
    unset($arr[$key=key($arr)]);

这将为填充数组提供$arr = array('first' => '1st', 'last' => '2nd.');

string(4) "2nd." # value
string(4) "last" # key
array(1) { # leftover array
  ["first"]=>
  string(3) "1st"
}

一个空数组:

bool(false) # value
NULL # key
array(0) { # leftover array
}

害怕使用未设置?

如果您不相信unset()具有您需要的性能(我认为这不是一个真正的问题,尽管我没有运行任何指标),您可以使用native {{ 1}}实现(但我真的认为array_pop()作为语言结构可能更快):

unset()

答案 1 :(得分:6)

array_slice

$arr = array('k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3');

$a = array_slice($arr, 0, 1);
var_dump($a);

$arr = array_slice($arr, 1);
var_dump($arr);


array(1) {
  ["k1"]=>
  string(2) "v1"
}
array(2) {
  ["k2"]=>
  string(2) "v2"
  ["k3"]=>
  string(2) "v3"
}

答案 2 :(得分:4)

$value = reset($array);
$key = key($array);

编辑:哈克只是打败了我: - )

答案 3 :(得分:3)

list($value, $key) = array(reset($s), key($s));
array_shift($s); // or just unset($s[$key]);

当然,您可以将第一个语句拆分为两个单独的语句。