合并数组中的字段

时间:2016-02-03 11:07:04

标签: php arrays multidimensional-array

我有这个数组,我需要重新安排它才能将它发送到另一个函数..... 这是实际数组,我直接从sql:

    array(5) {
      [0]=>
      array(4) {
        ["product"]=>
        string(4) "product1"
        ["country"]=>
        string(2) "BE"
        ["total"]=>
        string(2) "45"
      }
      [1]=>
      array(4) {
        ["product"]=>
        string(4) "product1"
        ["country"]=>
        string(2) "BG"
        ["total"]=>
        string(2) "31"
      }
      [2]=>
      array(4) {
        ["product"]=>
        string(4) "product1"
        ["country"]=>
        string(2) "CZ"
        ["total"]=>
        string(2) "48"
      }
      [3]=>
      array(4) {
        ["product"]=>
        string(4) "product1"
        ["country"]=>
        string(2) "DE"
        ["total"]=>
        string(2) "58"
      }
      [4]=>
      array(4) {
        ["product"]=>
        string(4) "product1"
        ["country"]=>
        string(2) "DK"
        ["total"]=>
        string(2) "39"
      }
    }

这是预期的数组:

array(5) {
  [0]=>
  array(4) {
    ["product_country"]=> string(4) "product1_BE"
    ["total"]=>
    string(2) "45"
  }
  [1]=>
  array(4) {
    ["product_country"]=> string(4) "product1_BG"
    ["total"]=>
    string(2) "31"
  }
  [2]=>
  array(4) {
    ["product_country"]=>string(4) "product1_CZ"
    ["total"]=>
    string(2) "48"
  }
  [3]=>
  array(4) {
    ["product_country"]=>string(4) "product1_DE"
    ["total"]=>
    string(2) "58"
  }
  [4]=>
  array(4) {
    ["product_country"]=> string(4) "product1_DK"
    ["total"]=>
    string(2) "39"
  }
}

所以,我需要合并colunms“product”+“country” 所以键将更改为“product_country”,值将更改为“Productvalue_countryValue” 然后从数组中删除“country”

我如何才能在简单快速的功能中实现这一目标? 此函数将运行一个位置超过12k的数组。

4 个答案:

答案 0 :(得分:4)

您可以遍历数组并将修改放入新数组中:

$array = //your first array

foreach($array as $a) $new_arr[] = array("product_country" => $a["product"]."_".$a["country"], "total" => $a["total"]);

var_dump($new_arr);

答案 1 :(得分:2)

您可以使用array_map执行此操作。它将遍历您的array并使用concatProductCountry回调为数组中的每个项目进行回调。

$input = 
    array(
      array(
        "product" => "product1",
        "country" => "BE",
        "total" => "45"
      ),
      array(
        "product" => "product1",
        "country" => "BG",
        "total" => "31"
      )
    );

function concatProductCountry($item){
  return array(
    'product_country' => $item['product'] . '_' . $item['country'],
    'total' => $item['total']
  );
}

$newArray = array_map('concatProductCountry', $input);
var_dump($newArray);

<强>输出

array(2) {
  [0]=>
  array(2) {
    ["product_country"]=>
    string(11) "product1_BE"
    ["total"]=>
    string(2) "45"
  }
  [1]=>
  array(2) {
    ["product_country"]=>
    string(11) "product1_BG"
    ["total"]=>
    string(2) "31"
  }
}

答案 2 :(得分:1)

循环实际数组并根据所需的数组格式创建一个新数组

foreach($actualArray as $k => $val) {
    $newArr[$k]['product_country'] = $val['product'] . '_' . $val['country'];
    $newArr[$k]["total"]           = $val["total"];
}

print_r($newArr);

答案 3 :(得分:1)

您可以通过调用多重排列数组来实现,

<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
$sort=array_multisort($data);
print_r($data);
?>