PHP中带键的数组映射

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP中带键的数组映射相关的知识,希望对你有一定的参考价值。

只是出于好奇(我知道它可以是单行foreach语句),是否有一些php数组函数(或许多函数的组合)提供了像这样的数组:

Array (
    [0] => stdClass Object (
        [id] => 12
        [name] => Lorem
        [email] => lorem@example.org
    )
    [1] => stdClass Object (
        [id] => 34
        [name] => Ipsum
        [email] => ipsum@example.org
    )
)

并且给定'id''name',会产生类似以下内容:

Array (
    [12] => Lorem
    [34] => Ipsum
)

我经常使用此模式,并且我注意到array_map在这种情况下非常没用,因为您无法为返回的数组指定键。

答案

只需使用array_reduce

array_reduce

这是一句没有评论的^^

另一答案

我发现我可以做到:

$obj1 = new stdClass;
$obj1 -> id = 12;
$obj1 -> name = 'Lorem';
$obj1 -> email = 'lorem@example.org';

$obj2 = new stdClass;
$obj2 -> id = 34;
$obj2 -> name = 'Ipsum';
$obj2 -> email = 'ipsum@example.org';

$reduced = array_reduce(
    // input array
    array($obj1, $obj2),
    // fold function
    function(&$result, $item){ 
        // at each step, push name into $item->id position
        $result[$item->id] = $item->name;
        return $result;
    },
    // initial fold container [optional]
    array()
);

但是很丑,并且在同一数组上需要两个完整的循环。

另一答案

因为您的数组是对象数组,所以您可以调用(它类似于类的变量),尝试使用此方法进行调用:

array_combine(array_map(function($o) { return $o->id; }, $objs), array_map(function($o) { return $o->name; }, $objs));

那么你可以做

 foreach ($arrays as $object) {
    Echo $object->id;
    Echo "<br>";
    Echo $object->name;
    Echo "<br>";
    Echo $object->email;
    Echo "<br>";
 } 

抱歉,我正在用手机接听。无法编辑代码

另一答案

最简单的方法是使用LINQ端口,例如 // your array of object example $arrays; $result = array(); foreach ($arrays as $array) { $result[$array->id] = $array->name; } echo "<pre>"; print_r($result); echo "</pre>"; 库*。它允许对数组和对象执行类似SQL的查询。它的YaLinqo函数接受两个回调:结果数组的一个返回键和一个返回值。例如:

toDictionary

或者您可以使用较短的语法使用字符串,这等效于以上版本:

toDictionary

如果省略第二个参数,则对象本身将用作结果数组中的值。

*由我开发]]

另一答案

最简单的方法是使用array_column()

以上是关于PHP中带键的数组映射的主要内容,如果未能解决你的问题,请参考以下文章

Laravel中带有2个外键的搜索栏

片段中带有 RequestPermission 的 registerForActivityResult 不起作用

ES6映射对象数组,以返回具有新键的对象数组[重复]

在PHP中按数组键的值对字典中的数组进行排序

php 数组索引值如何重新从0开始递增

javascript 可以在不指定 PHP 等键的情况下将元素添加到数组吗?