将2行合并为一个填充空字段

时间:2016-07-18 13:27:54

标签: php arrays merge

所以,我一直在寻找,但我找不到类似的东西。 我需要的是合并我从DB获得的2行(存储在数组中)并填写空字段。

我们有两个键FIXED和WEIGHT,它们在列中有不同的值。如果我们使用FIXED类型,我们不使用WEIGHT中的值,那些列是空的,现在我必须将这2个2row合并为一个。

有N行(但总是成对)。

这是示例

id type   postal fix_price weight_price our_price your_price product_id group_id
1  fixed  8888   50        -            50        -          1          2
2  weight 8888   -         100          -         100        1          2
3  fixed  7777   20        -            20        -          1          2
4  weight 7777   -         30           -         30         1          2

我需要如下结果:

id postal fix_price weight_price our_price your_price product_id group_id
1  8888   50        100          50        100        1          2
2  7777   20         30          20        30         1          2

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

尝试:

ID:2131492868

这会产生你的结果,但我不是你真正想要的东西。

答案 1 :(得分:0)

我真的不明白你的问题是如何与@JustOnUnderMillions答案中你在评论中分享的(非常不同的)数据结构相关联的,所以这里是基于你的初始问题所建议的结构的答案。 p>

利用你的其他评论,你说“我尝试过使用$ arra1 + $ array2”,我猜你可以先将源数据格式化为:

$fixed = [
  8888 => [50, NULL, 50, NULL, 1, 2],
  7777 => [20, NULL, 20, NULL, 1, 2],
];
$weight = [
  8888 => [NULL, 100, NULL, 100, 1, 2],
  7777 => [NULL, 30, NULL, 30, 1, 2],
];

然后使用这个简单的代码非常容易:

foreach ($fixed AS $postal => $fixed_data) {
  $weight_data = $weight[$postal];
  foreach ($fixed_data AS $key => $fixed_value) {
    $all[$postal][$key] = $fixed_value ? $fixed_value : $weight_data[$key];
  }
}

给出了预期的结果:

echo '<pre>' . print_r($all, TRUE) . '</pre>';
/*
Array
(
    [8888] => Array
        (
            [0] => 50
            [1] => 100
            [2] => 50
            [3] => 100
            [4] => 1
            [5] => 2
        )

    [7777] => Array
        (
            [0] => 20
            [1] => 30
            [2] => 20
            [3] => 30
            [4] => 1
            [5] => 2
        )

)
*/