将一个数组的值分配给另一个不合并的数组

时间:2016-02-23 08:21:40

标签: php arrays laravel multidimensional-array array-merge

我需要将第二个数组的某些值附加到第一个数组

即,

在First Array中,我创建了两个元素,如nameprice,并从Second Array获取值并将其提供给第一个数组

这是我的第一个数组

[
  {
    "id": 8,
    "user_id": 21,
    "category_id": 1,
    "juice_id": 2,
    "count": "100",
    "status": "1",
    "created_at": "2016-02-23 07:12:14",
    "updated_at": "2016-02-23 07:12:14"
  },
  {
    "id": 9,
    "user_id": 21,
    "category_id": 1,
    "juice_id": 1,
    "count": "100",
    "status": "1",
    "created_at": "2016-02-23 07:15:47",
    "updated_at": "2016-02-23 07:15:47"
  }
]

第二个数组是

{
  "1": {
    "id": 2,
    "store_id": 1,
    "category_id": 1,
    "name": "Cashew Butter Baby",
    "image": "http://greenhoppingbucket.s3.amazonaws.com/juice/1455719144rebV3iRUlj.png",
    "description": "Cashew, Butter and Milk",
    "price": "12.00",
    "status": 1,
    "created_at": "2016-02-17 19:56:11",
    "updated_at": "2016-02-17 19:56:11"
  },
  "2": {
    "id": 1,
    "store_id": 1,
    "category_id": 1,
    "name": "Kalekolada",
    "image": "http://greenhoppingbucket.s3.amazonaws.com/juice/1455719105WAVB3SGxT7.png",
    "description": "Pulp of Kale",
    "price": "10.00",
    "status": 1,
    "created_at": "2016-02-17 19:55:34",
    "updated_at": "2016-02-17 19:55:34"
  }
}

我的预期结果是

[
  {
    "id": 8,
    "user_id": 21,
    "category_id": 1,
    "juice_id": 2,
    "count": "100",
    "status": "1",
    "created_at": "2016-02-23 07:12:14",
    "updated_at": "2016-02-23 07:12:14"
    "name": "Cashew Butter Baby",
    "price": "12.00",
  },
  {
    "id": 9,
    "user_id": 21,
    "category_id": 1,
    "juice_id": 1,
    "count": "100",
    "status": "1",
    "created_at": "2016-02-23 07:15:47",
    "updated_at": "2016-02-23 07:15:47",
    "name": "Kalekolada",
    "price": "10.00",

  }
]

我尝试$newArray = array_merge($cartData, $juiceData);

但它只是合并两个阵列。

错误是什么,我该怎么做?

1 个答案:

答案 0 :(得分:0)

这是用于合并这些数组的一些代码。你应该有一个共同的索引(不同的顺序可能导致意外的行为)。

<?php

$a = array(
    array(
        "id" => 8,
        "user_id" => 21,
        "category_id" => 1,
        "juice_id" => 2,
        "count" => "100",
        "status" => "1",
        "created_at" => "2016-02-23 07:12:14",
        "updated_at" => "2016-02-23 07:12:14"
    ),
    array(
        "id" => 9,
        "user_id" => 21,
        "category_id" => 1,
        "juice_id" => 1,
        "count" => "100",
        "status" => "1",
        "created_at" => "2016-02-23 07:15:47",
        "updated_at" => "2016-02-23 07:15:47"
    )
);

$b = array(
    array(
        "id" => 2,
        "store_id" => 1,
        "category_id" => 1,
        "name" => "Cashew Butter Baby",
        "image" => "http://greenhoppingbucket.s3.amazonaws.com/juice/1455719144rebV3iRUlj.png",
        "description" => "Cashew, Butter and Milk",
        "price" => "12.00",
        "status" => 1,
        "created_at" => "2016-02-17 19:56:11",
        "updated_at" => "2016-02-17 19:56:11"
    ),
    array(
        "id" => 1,
        "store_id" => 1,
        "category_id" => 1,
        "name" => "Kalekolada",
        "image" => "http://greenhoppingbucket.s3.amazonaws.com/juice/1455719105WAVB3SGxT7.png",
        "description" => "Pulp of Kale",
        "price" => "10.00",
        "status" => 1,
        "created_at" => "2016-02-17 19:55:34",
        "updated_at" => "2016-02-17 19:55:34"
    )
);

// For this to work the arrays need to have the same string keys
// $merge = array_merge_recursive( $a, $b );

$merge = array();
foreach( $b as $key => $entry ) {
    if( isset($a[$key]) ) {
        $entry += $a[$key];
    }

    $merge[] = $entry;
}

var_dump( $merge );

编辑:

评论中的新信息会给我们提供类似的信息:

$categories = array();
foreach( $b as &$entry ) {
    $categories[$entry['id']] =& $entry;
}

$products = array();
foreach( $a as &$entry ) {
    if( isset($categories[$entry['juice_id']]) ) {
        $entry['category'] =& $categories[$entry['juice_id']];
    }

    $products[] =& $entry;
}

var_dump( $products );

无需通过引用传递它们,但应节省一些内存。