PHP 中按键名项目关联数组

发布于 2024-10-01 00:53:01 字数 304 浏览 0 评论 0原文

有没有任何php函数可以做到这一点:

$source = array('id1'=>'name', 'id2'=>'name2', 'id3'=>'name3');

$keys = array('id1', 'id3');

$projection = project($source, $keys);

我想要:

$projection = array('name', 'name3');

我搜索了标准数组函数很长时间,但找不到任何东西。

Are there any php function that do this:

$source = array('id1'=>'name', 'id2'=>'name2', 'id3'=>'name3');

$keys = array('id1', 'id3');

$projection = project($source, $keys);

I want:

$projection = array('name', 'name3');

I searched the standard array functions for a long time and I could not find anything.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

掐死时间 2024-10-08 00:53:01

看起来我应该更仔细地看看 - 技巧是使用这个函数:

$projection = array_intersect_key($source, array_flip($keys))

但是,它很丑陋,因为你需要执行 array_flip。

Looks like I should look harder - the trick is to use this function:

$projection = array_intersect_key($source, array_flip($keys))

However, it is ugly because you need to do an array_flip.

生来就爱笑 2024-10-08 00:53:01

不是这样的。您可以使用以下命令更接近您尝试执行的操作:

$projection = array_values(array_replace(array_flip($keys),$source));

或者:

$projection = array_values(array_intersect_key(array_flip($keys),$source));

但是,如果给定项目在键数组中出现两次,则这将不起作用。

如果您可以访问 PHP 5.3,则可以使用闭包:

$projection = array_map(
  function($key) use (&$source) { return $source[$key]; }, $keys
);

Not as such. You could get closer to what you're trying to do using:

$projection = array_values(array_replace(array_flip($keys),$source));

Or:

$projection = array_values(array_intersect_key(array_flip($keys),$source));

However, this will not work if a given item appears twice in the key array.

If you have access to PHP 5.3, you can use a closure:

$projection = array_map(
  function($key) use (&$source) { return $source[$key]; }, $keys
);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文