【问题标题】:How to merge multiple array with their same key value如何合并具有相同键值的多个数组
【发布时间】:2021-04-15 15:43:14
【问题描述】:

你好,我在想如果如何将数组与其相同的键值对组合起来

Array
(
    [category_id] => Array
        (
            [0] => 1
            [1] => 2
        )

    [product] => Array
        (
            [0] => Apple
            [1] => Cow
        )

    [category] => Array
        (
            [0] => Fruit
            [1] => Meat
        )
)

我已经使用了 array_combine,但预期的输出与该输出不同。

我想看到的输出是这样的。

1 , Apple , Fruit
2 , Cow , Meat

我不知道该怎么做。希望你能帮助我。非常感谢

【问题讨论】:

  • 旁注:分享var_export 的输出比分享print_r 更好,因为这样任何人都可以轻松地将内容复制到他们的编辑器中进行测试。

标签: php arrays multidimensional-array


【解决方案1】:

直接输出

如果您只需要将数组直接输出到页面,您可以执行以下操作:

foreach($original_array['category_id'] as $key => $categoryid) {
    $product = $original_array['product'][$key];
    $category = $original_array['category'][$key];
    
    echo "{$categoryid} , {$product} , {$category}\n";
}

这非常简单,只需要一个 foreach 循环。如果您不需要在不同的地方多次使用此数据,这将非常有用。


格式化数组输出

如果您稍后可能需要在代码中使用它,我将使用上面循环中的数据创建一个新数组。 如果您不再需要访问这些数据,这可能有点过头了。

$output = [];
foreach($original_array['category_id'] as $key => $categoryid) {
    $product = $original_array['product'][$key];
    $category = $original_array['category'][$key];
    
    $output[] = ['category_id' => $categoryid, 'product' => $product, 'category' => $category];
}

这将使$output 类似于

Array
(
    [0] => Array
        (
            [category_id] => 1
            [product] => Apple
            [category] => Fruit
        )

    [1] => Array
        (
            [category_id] => 2
            [product] => Cow
            [category] => Meat
        )

)

当然,以您所需的格式输出是微不足道的。

foreach($output as $values) {
    echo "{$values['categoryid']} , {$values['product']} , {$values['category']}";
}

【讨论】:

  • 谢谢你,我已经知道了,现在上帝保佑
【解决方案2】:

在这种情况下,一个简单的 foreach 循环似乎是最好的方法

$original = [
    'category_id' => [1, 2],
    'product' => ["Apple", "Cow"],
    'category' => ["Fruit", "Meat"]
];

foreach ( $original['category_id'] as $key => $v) {
    echo sprintf("%d, %s, %s\n", $v, $original['product'][$key], $original['category'][$key]);
}

结果

1, Apple, Fruit
2, Cow, Meat

【讨论】:

    【解决方案3】:

    另一种动态方法是使用array_column()implode()

    $array = [
        'category_id' => [1,       2],
        'product'     => ['Apple', 'Cow'],
        'category'    => ['Fruit', 'Meat'],
    ];
    
    // Gets the number of items in the first subarray:
    $numColumns = count(reset($array));
    
    // Loop around the columns:
    for ($idx = 0; $idx < $numColumns; $idx++)
    {
        // Print the column $idx, separated by ', ':
        echo implode(', ', array_column($array, $idx)) . "\n";
    }
    

    输出:

    1, Apple, Fruit
    2, Cow, Meat
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-29
      • 2022-01-17
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 1970-01-01
      相关资源
      最近更新 更多