从 PHP 关联数组中弹出键和值

2024-02-25

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

我会用

value1=array_pop(S);

但它只给了我价值。

我可以用

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

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


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

(以该顺序)

See reset()PHP Manual http://php.net/manual/en/function.reset.php, key()PHP Manual http://www.php.net/manual/en/function.key.php.

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

However array_pop()PHP Manual http://php.net/manual/en/function.array-pop.php is working with the last element:

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

See end()PHP Manual http://www.php.net/manual/en/function.end.php.

为了好玩:

[$value, $key] = [reset($arr), key($arr)]; // first
[$value, $key] = [end($arr), key($arr)]; // last

(PHP 7.1+)

or

list($value, $key) = array(reset($arr), key($arr)); // first
list($value, $key) = array(end($arr), key($arr)); // last

(PHP 4.3+)

or

extract(array('value' => reset($arr), 'key' => key($arr))); // first
extract(array('value' => end($arr), 'key' => key($arr))); // last

(PHP 4.3+;警告:提炼() https://php.net/extract正在使用!)

or

// first
reset($arr);
list($key, $value) = each($arr);


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

(注意:each() 函数自 PHP 7.2.0 起已弃用,自 PHP 8.0.0 起已消失)

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

处理空数组

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

// first
for ($key = null, $value = null; false !== $_ = reset($arr);)
{
    $value = $_;
    unset($arr[$key = key($arr)]);
    break;
}
unset($_);

// last
for ($key = null, $value = null; false !== $_ = end($arr);)
{
    $value = $_;
    unset($arr[$key = key($arr)]);
    break;
}
unset($_);

这将给出一个填充数组,例如$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()作为语言构造可能会更快):

// first
reset($arr);
$key = key($arr);
$value = array_pop($arr);


// last
end($arr);
$key = key($arr);
$value = array_pop($arr);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 PHP 关联数组中弹出键和值 的相关文章

随机推荐

  • DDD - 使用 Doctrine 2 的有界上下文之间的关联映射

    我正在努力理解使用 Doctrine 2 实现来自不同有界上下文的两个实体之间的关联映射的正确方法 假设有两个 User 和 Post 实体分别属于 User 和 Content 有界上下文 内容 上下文中还有一个 用户 概念 它通过多对一
  • iOS如何屏蔽图像背景颜色

    我想在我的 iOS 应用程序中执行以下操作 用户可以在白色背景纸上画一些东西 我的应用程序允许用户捕获绘制的图像 这里的图像将以白色背景捕获 最后 从捕获的图像中 我需要掩盖白色背景颜色 然后将图像单独放入 UIImage 对象中 我完成了
  • 为什么 Intellij 默认 getter/setter 模板会删除我的布尔“is”变量名前缀?

    我有一个实体 我将变量定义为布尔值 并使用 Intellij Idea Shortcuts 创建了 Getter 和 Setter 方法 private Boolean isForLaboratory false 创建后生成如下 publi
  • cosmosdb mongo api 不适用于某些命令

    我在用cosmosdb在天蓝色上我正在使用MongoDB API我有一个 要求 集合里面有一个 claims array 如果我使用这个命令 db getCollection requests find claims id 1002 它不适
  • clang vs gcc - 空通用 lambda 变量参数包

    我想我找到了另一个 clang 与 gcc lambda 和可调用对象之间的不一致 decltype l operator 应该等于C operator 但是如果通用 lambda 中的可变参数包留空 gcc 会拒绝编译 15 错误 与调用
  • Highcharts - 仅当直接悬停在点上时显示工具提示

    Highcharts 的默认体验似乎是距离光标最近的点 水平 处于悬停状态 这意味着当您到达行中下一个点的一半以上时 就会触发工具提示 我希望当我直接将鼠标悬停在一个点上时触发工具提示 然后保持活动状态 直到我将鼠标直接悬停在另一个点上 这
  • adb Push/Pull 的默认工作目录是什么以及如何更改它?

    我使用 adb 从 android sdcard 中提取了一个文件 它似乎转到了c documents and settings userName默认情况下 我不知道它是如何设置到这个文件夹的 因为这不是安装 adb 的地方 但可能与以下事
  • 如何在 Dropwizard 项目(Angular 7 前端)中创建并开始使用嵌入式 Apache Derby 数据库

    我正在阅读 Derby 文档并遵循所有说明 我已成功安装它 将其解压到我的 Linux 计算机并设置 DERBY HOME 路径 我有一个完整的 REST API 项目 带有 Angular 7 前端和 Dropwizard 后端 我在后端
  • 有没有办法在 numpy.hist 中返回相同长度的数组?

    我正在尝试在 python 中创建直方图 用一些自定义值对 y 轴值进行标准化 为此 我想这样做 import numpy as np import matplotlib pyplot as plt data np loadtxt foo
  • 惰性 var 属性初始化两次是否正常?

    当我使用房产时 我遇到过很奇怪的情况lazy关键词 我知道这个关键字表示属性的初始化将被推迟到实际使用变量为止 但是 它并没有像我预期的那样工作 它运行两次 class TestLazyViewController UIViewContro
  • 为什么 is 运算符在给定 null 时返回 false?

    在我看来 is运营商有点不一致 bool Test Returns false but should return true return null is string 人们期望null值属于任何引用 或可为空 类型 事实上 C 语言规范的
  • http_build_query() 点转换为下划线

    请检查以下数组 Array bunrey gt Array 0 gt 20130730181908615391000000 mt shasta gt Array 0 gt 20130708203742347410000000 1 gt 20
  • 如何使用 jQuery 检测 IE 8?

    我不仅需要检测浏览器类型 还需要使用 jQuery 检测浏览器版本 主要是我需要确定它是否是 IE 8 我不确定我是否做得正确 如果我做 if jQuery browser version gt 8 0 dosomething 我不确定它是
  • 在 python selenium webdriver 中发送密钥而不指定元素

    我有一个页面 其源代码不可用 但有一个输入框 光标在闪烁 我可以在文本框中写入一些内容而不找到该元素吗 我的意思是 发送键可以通过某种方式自动查找焦点输入框并在其中键入输入 我的代码显然不能工作 driver send keys testd
  • 使用意图上传图像

    我正在尝试为我的 Android 移动应用程序上传图像 对于从图库文件夹上传的图像 该代码运行良好 但是 如果我从 最近的图像 文档 下载 中选择任何图像 则图像路径不会被提取 无法上传图像 你能帮我解决这个问题吗 这是我的编码供您参考 p
  • 在谷歌中搜索单词并想使用java程序找到每个单词的命中

    我有30000个字典单词 我想在 Google 中搜索每个单词 并想使用 Java 程序找到每个单词的匹配项 是否可以 Look up
  • 如何在 EF Core 中放弃对上下文的更改

    我有一个巨大的 json 格式的 扁平化 对象列表 以及一个有点复杂的关系数据库模式 大约 20 个表对应于一个扁平化对象 我正在尝试在新的关系数据库中自动插入这些扁平对象 foreach var flattenedObject in fl
  • jQuery-UI 可排序 - 更新后同步数组(模型)

    假设我有一个包含数据的数组 它可能来自 Ajax 但无需在此处执行此操作 使用该数组 我生成 UL 元素的内容 并使用 jQuery UI 使 UL 可排序 在客户端对它进行排序之后 我希望保持数组的顺序与 UL 同步 有没有一种优雅的方法
  • 如何用python画动态规划表

    What is a good way to draw a dynamic programming such as this one with the path in python 我在网上查了一下 我看到了pygame http pygam
  • 从 PHP 关联数组中弹出键和值

    假设 S 是 PHP 中的关联数组 我需要从中检索并提取第一个元素 包括值和键 我会用 value1 array pop S 但它只给了我价值 我可以用 K array keys S key1 array pop K value1 arra