如何创建一个新的键名并将数组中的值与PHP组合?

时间:2017-11-21 10:53:01

标签: php arrays

我有2个PHP数组,我需要将值组合在一起。

First Array

screen

第二个数组

array(2) {
    [0]=>
    array(1) {
        ["id"]=>
        string(1) "1"
    }
    [1]=>
    array(1) {
        ["id"]=>
        string(2) "40"
    }
}

输出所需

array(2) {
    [0]=>
    string(4) "1008"
    [1]=>
    string(1) "4"
}

如您所见,我需要在第二个数组中添加一个新的键名(array(2) { [0]=> array(1) { ["id"]=> string(1) "1", ["count"]=> string(1) "1008" } [1]=> array(1) { ["id"]=> string(2) "40", ["count"]=> string(1) "4" } } )并将值组合到我的第一个数组中。

如何组合输出此数组?

4 个答案:

答案 0 :(得分:2)

尝试以下内容。我们的想法是迭代第一个数组,并为每个数组索引添加一个新的键" count"保存包含在第二个数组的相同索引上的值。

$array1 = [];
$array2 = [];

for ($i = 0; $i < count($array1); $i++) {
    $array1[$i]['count'] = $array2[$i];
}

答案 1 :(得分:1)

你可以这样做

$arr1=[["id"=>1],["id"=>40]];
$arr2=[1008,4];
for($i=0;$i<count($arr2);$i++){
  $arr1[$i]["count"] = $arr2[$i];
}

现场演示:https://eval.in/904266

输出

Array
(
    [0] => Array
        (
            [id] => 1
            [count] => 1008
        )

    [1] => Array
        (
            [id] => 40
            [count] => 4
        )

)

答案 2 :(得分:1)

另一种功能方法(这不会改变/改变初始数组):

$arr1 = [['id'=> "1"], ['id'=> "40"]];
$arr2 = ["1008", "4"];

$result = array_map(function($a){
    return array_combine(['id', 'count'], $a);
}, array_map(null, array_column($arr1, 'id'), $arr2));

print_r($result);

输出:

Array
(
    [0] => Array
        (
            [id] => 1
            [count] => 1008
        )

    [1] => Array
        (
            [id] => 40
            [count] => 4
        )
)

答案 3 :(得分:0)

或另一种递归方法:

public object[] Add_Function()
{
    return new object[]
    {
        new object[]
        {
            new byte[] { 1, 1, 1 }, new byte[] { 1, 1, 1 }, new byte[] { 2, 2, 2 }
        },
        new object[]
        {
            new byte[] { 1, 1, 255 }, new byte[] { 0, 0, 1 }, new byte[] { 1, 2, 0 }
        }
    };
}

[TestCaseSource("Add_Function")]
public void Add(byte[] a, byte[] b, byte[] expected)
{
    // arrange
    int len = Math.Max(a.Length, b.Length);
    Array.Resize(ref a, len);
    Array.Resize(ref b, len);
    byte[] result = new byte[len];

    //act
    DoAdd(a, b, result, 0, len - 1);

    //assert
    CollectionAssert.AreEqual(expected, result);
}

private void DoAdd(byte[] a, byte[] b, byte[] result, int broughtForward, int index)
{
    int carriedForward = (a[index] + b[index] + broughtForward) / (byte.MaxValue + 1);
    result[index] =(byte)((a[index] + b[index] + broughtForward) % (byte.MaxValue + 1));
    if (index > 0)
    {
        DoAdd(a,b,result, carriedForward, index-1);
    }
}

输出:

$arr1=[["id"=>1],["id"=>40]];
$arr2=[1008,4];

foreach ($arr1 as $key=>$value) {
    $result[] = array_merge_recursive($arr1[$key], array ("count" => $arr2[$key]));
}

print_r($result);