在PHP中从关联数组中取出键和值

jum4pzuy  于 2023-03-16  发布在  PHP
关注(0)|答案(5)|浏览(170)

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

value1=array_pop(S);

但它只给了我价值。
我可以用

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

但是它很复杂,因为它需要有相同数据的两个副本。2这是一个令人困惑的,因为数组本身是数组的数组中的一个元素。3必须有一个更优雅的方法来读取键/值对,同时提取它。

zpgglvta

zpgglvta1#

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

(in该订单)
请参见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?

如果您不相信unset()具有所需的性能(我认为这不是一个真正的问题,尽管我没有运行任何指标),您也可以使用原生array_pop()实现(但我确实认为unset()作为一种语言构造可能会更快):

end($arr);
$key = key($arr);
$value = array_pop($arr);
uqdfh47h

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"
}
jtoj6r0c

jtoj6r0c3#

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

编辑:Hakre只是抢先了我一步:-)

kcrjzv8t

kcrjzv8t4#

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

当然你可以把第一个语句分成两个单独的语句。

vlju58qv

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循环中移动/取消设置数组元素,直到数组为空。

相关问题