PHP 如何将对象数组与数组数组合并

标签 php arrays object

首先,对于冗长的解释表示抱歉。我在 PHP 中有两个数组。第一个数组是对象数组。第二个数组是数组的数组。基本上,我想循环遍历,并将对象与其匹配的数组合并,然后返回一个合并的对象。

请参阅以下对象结构数组的 print_r():

Array
(
[0] => stdClass Object
    (
        [gear] => helloworld
        [status] => running
        [started] => 40 Minutes Ago
        [start] => index.js
        [route] => 127.0.0.1:3000
        [parameters] => Array
            (
            )

    )

[1] => stdClass Object
    (
        [gear] => test
        [status] => stopped
        [started] => 
        [start] => index.js
        [route] => 
        [parameters] => Array
            (
            )

    )

[2] => stdClass Object
    (
        [gear] => test2
        [status] => stopped
        [started] => 
        [start] => index.js
        [route] => 
        [parameters] => Array
            (
                [0] => first
                [1] => second
                [2] => third
            )

    )

)

请参阅以下数组结构的print_r():

Array
(
[0] => Array
    (
        [gear] => helloworld
        [machine_id] => E6z5ekvQ
        [created_by] => 10010
        [modified_by] => 10010
        [created] => 2011-09-22T16:30:11-07:00
        [modified] => 2011-09-22T16:30:11-07:00
    )

[1] => Array
    (
        [gear] => test
        [machine_id] => E6z5ekvQ
        [created_by] => 10010
        [modified_by] => 10010
        [created] => 2011-09-22T16:44:25-07:00
        [modified] => 2011-09-22T16:44:25-07:00
    )

[2] => Array
    (
        [gear] => test2
        [machine_id] => E6z5ekvQ
        [created_by] => 10010
        [modified_by] => 10010
        [created] => 2011-09-22T16:45:43-07:00
        [modified] => 2011-09-22T16:45:43-07:00
    )

)

所以基本上两者的匹配键是gear。因此,我们应该将第一个对象中的齿轮与数组中的第二个齿轮进行匹配,并返回类似以下内容的内容:

stdClass Object
    (
        [gear] => helloworld
        [status] => running
        [started] => 40 Minutes Ago
        [start] => index.js
        [route] => 127.0.0.1:3000
        [parameters] => Array
            (
            )
        [machine_id] => E6z5ekvQ
        [created_by] => 10010
        [modified_by] => 10010
        [created] => 2011-09-22T16:30:11-07:00
        [modified] => 2011-09-22T16:30:11-07:00
    )

请注意,齿轮被合并到对象的一个​​属性中,显然齿轮不会出现两次。有想法吗?

最佳答案

如果您可以通过 gear 或某个唯一值对数组进行索引,那就容易多了。

$indexed = array();

// create an array using 'gear' as the index
foreach($arrayValue as $value) {
    $indexed[$value['gear']] = $value;
}

// loop over each object
foreach($objectArray as $obj) {
    $value = $indexed[$obj->gear]; // find the corresponding array
    foreach($value as $name => $val) {
        $obj->$name = $val; // assign each array index/value pair to the object
    }
}

如果可以让您的代码默认返回带有索引的数组,您可以删除第一个 foreach 循环。

希望有帮助。

关于PHP 如何将对象数组与数组数组合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7523017/

相关文章:

php - 当子项是当前选定的元素时,将类 ="active"添加到父项

php - 在不使用单字字体的情况下,固定每个 <p> 的字符行数,这可能吗?

c++ - 在列表小部件 Qt C++ 中显示数组内容

objective-c - 理解 Objective-C 中的 self

javascript - 基于 HTML 下拉选择填充输入

php - 如何通过 Facebook API 发布多张照片

java - 将元素添加到第一个空数组的索引

python - NumPy 中的 ndarray 和数组有什么区别?

javascript - 获取对象内部字符串中的最高数字

javascript - 如何使用变量通过键选择对象节点