假设S是PHP中的一个关联数组,我需要检索并从中提取第一个元素,包括值和键。我会用
value1=array_pop(S);
但它只给了我价值。我可以用
K=array_keys(S); key1=array_pop(K); value1=array_pop(S);
但是它很复杂,因为它需要有相同数据的两个副本。2这是一个令人困惑的,因为数组本身是数组的数组中的一个元素。3必须有一个更优雅的方法来读取键/值对,同时提取它。
zpgglvta1#
$value = reset($arr); $key = key($arr);
(in该订单)请参见reset()PHP Manual、key()和PHP Manual。
reset()
key()
unset($arr[$key]); # in case you want to remove it.
但是array_pop()PHP Manual正在处理最后一个元素:
array_pop()
$value = end($arr); $key = key($arr); unset($arr[$key]); # in case you want to remove it.
参见end()PHP Manual。
end()
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不能是数组键):
$key
null
for($key=null;$key===null&&false!==$value=end($arr);) unset($arr[$key=key($arr)]);
对于$arr = array('first' => '1st', 'last' => '2nd.');这样的填充数组,将给予:
$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()具有所需的性能(我认为这不是一个真正的问题,尽管我没有运行任何指标),您也可以使用原生array_pop()实现(但我确实认为unset()作为一种语言构造可能会更快):
unset()
end($arr); $key = key($arr); $value = array_pop($arr);
uqdfh47h2#
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" }
jtoj6r0c3#
$value = reset($array); $key = key($array);
编辑:Hakre只是抢先了我一步:-)
kcrjzv8t4#
list($value, $key) = array(reset($s), key($s)); array_shift($s); // or just unset($s[$key]);
当然你可以把第一个语句分成两个单独的语句。
vlju58qv5#
下面是我在类似情况下的做法:
$last_index = count($test_array)-1; if($last_index >= 0) { $last_key = array_keys($test_array)[$last_index]; foreach($test_array as $k => $v) { if($k == $last_key) echo "last: "; echo $k . '=' . $v . PHP_EOL; } }
尽管我最终使用的解决方案是while循环(我实际上并不需要保留键)。我基本上是想通过在同一行上放置多个数组元素来将数组元素放到pdf的某个区域中。我使用array_chunk()将数组分解为每个5或更少的子数组,然后使用while(count($chunks) > 0) {}移动得到的数组。本文的一些解决方案可以类似地在while循环中移动/取消设置数组元素,直到数组为空。
while(count($chunks) > 0) {}
5条答案
按热度按时间zpgglvta1#
(in该订单)
请参见
reset()
PHP Manual、key()
和PHP Manual。但是
array_pop()
PHP Manual正在处理最后一个元素:参见
end()
PHP Manual。为了娱乐:
或
或
或者任何你喜欢的风格)
处理空数组
到目前为止,还没有处理空数组的方法,因此需要检查是否有最后一个(第一个)元素,如果没有,则将
$key
设置为null
(因为null
不能是数组键):对于
$arr = array('first' => '1st', 'last' => '2nd.');
这样的填充数组,将给予:和一个空数组:
害怕使用unset?
如果您不相信
unset()
具有所需的性能(我认为这不是一个真正的问题,尽管我没有运行任何指标),您也可以使用原生array_pop()
实现(但我确实认为unset()
作为一种语言构造可能会更快):uqdfh47h2#
array_slice
jtoj6r0c3#
编辑:Hakre只是抢先了我一步:-)
kcrjzv8t4#
当然你可以把第一个语句分成两个单独的语句。
vlju58qv5#
下面是我在类似情况下的做法:
尽管我最终使用的解决方案是while循环(我实际上并不需要保留键)。
我基本上是想通过在同一行上放置多个数组元素来将数组元素放到pdf的某个区域中。我使用array_chunk()将数组分解为每个5或更少的子数组,然后使用
while(count($chunks) > 0) {}
移动得到的数组。本文的一些解决方案可以类似地在while循环中移动/取消设置数组元素,直到数组为空。