php - 有条件地组合 PHP 数组

标签 php arrays

是否有一种干净的方法可以有条件地组合 2 个 PHP 数组? 我分别从两个数组中获得以下 JSON 响应:

第一个数组:

[
      {
        "field": {
          "id": 20,
          "name": "Erfolge",
          "field-id": "erfolge",
          "type": "textarea"
        }
      },
      {
        "field": {
          "id": 29,
          "name": "Sprachen",
          "field-id": "sprachen",
          "type": "text"
        }
      }
]

第二个数组:

    [
  {
    "field": {
      "id": 20,
      "name": "Erfolge",
      "field-id": "erfolge",
      "type": "textarea"
    },
    "value": "new entry"
  },
  {
    "field": {
      "id": 4,
      "name": "Trikotnummer",
      "field-id": "trikotnummer",
      "type": "number"
    },
    "value": "test"
  },
  {
    "field": {
      "id": 29,
      "name": "Sprachen",
      "field-id": "sprachen",
      "type": "text"
    },
    "value": "Text"
  }
]

我想要以下目标输出:

    [
      {
        "field": {
          "id": 20,
          "name": "Erfolge",
          "field-id": "erfolge",
          "type": "textarea"
        },
        value: "new entry"
      },
      {
        "field": {
          "id": 29,
          "name": "Sprachen",
          "field-id": "sprachen",
          "type": "text"
        },
        value: "Text"
      }
]

这意味着如果该字段存在于第一个数组中,则它必须只添加值。 我当前的解决方案为我提供了所有没有正确映射的字段:

$fieldData = array();
    foreach ($fields as $field) {
        $fieldData[]['fields'] = $field->getArrayCopy();
    }

    // Get Values
    $values = $user->getProfileFieldValue();

    $fieldValue = array();
    foreach ($values as $value) {
        $fieldValue[] = $value->getArrayCopy();
    }

    $result = array_merge($fieldData, $fieldValue);

我应该使用函数 array_walk 吗?

最佳答案

这是一种昂贵的方法,它会搜索第二个数组以查找与第一个数组中的 ID 匹配的元素。

$result = array();
foreach ($first as $e1) {
    $id = $e1['field']['id'];
    foreach ($secondArray as $e2) {
        if ($e2['field']['id'] == $id) {
            $e1['value'] = $e2['value'];
            break;
        }
    }
    $result[] = $e1;
}

如果第二个数组非常大,您可以通过首先创建一个关联数组来优化它,关联数组的键是第二个数组中的 ID,值是值。

关于php - 有条件地组合 PHP 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32791012/

相关文章:

Javascript - 有条件地选择 while 循环的条件

java - 通过单击 JPanel 获取 JPanel[][] 坐标

android - Tramping array textviews Android

arrays - 无法使用类型为 "UInt32"的索引为类型 [String] 的值下标

php - 由于 "invalid-input-secret",google recaptcha 返回 false

javascript - 如何从另一个页面 JavaScript/PHP 获取 URL 值

javascript - 一旦调整大小的图像提供下载,隐藏加载 gif

ruby - 如何映射嵌套数组

php - 将 MySQL 数据与另一个表进行比较

javascript - 仅在第二页加载时动画定位