添加具有相同值

时间:2016-10-11 15:32:07

标签: php arrays

我需要有关如何使用相同的键添加或组合数组值的帮助或建议。

例如:

Array(
    [price] => 123
    [category] => Fiction
    [bookname] => Any-Book
    [type] => Futuristic 
)
Array (
    [price] => 145
    [category] => Fantasy
    [bookname] => Any-Book
    [type] => Futuristic
)

经过多次尝试,我无法达到我想要的效果 它应该是:

Array (
    [price] => 268
    [category] => Fantasy/Fiction
    [bookname] => Any-book
    [type] => Futuristic
)

我只需要将两者基本相同或者需要捆绑在一起。

2 个答案:

答案 0 :(得分:1)

您需要确定数组的类型并且它们具有相同的键:

 <?php
$a = array('price' => 123,
     'category' => 'Fiction',
     'bookname' =>'Any-book', 
     'type' => 'Futuristic');

      $b = array('price' => 145,
     'category' => 'Fantasy',
     'bookname' =>'Any-book', 
     'type' => 'Futuristic');



function mergeSameArray(array $a, array $b){
    $c = array();
    foreach($a as $key => $valueA){
        $typeA = gettype($valueA);
        $typeB = gettype($b[$key]); //$valueB
        if($typeB == $typeA){
            if($typeB == "double" || $typeA == "integer"){
                $c[$key] = $valueA+ $b[$key];
            }
            elseif($typeB == "string"){
                if($valueA == $b[$key]){
                    $c[$key] = $valueA;
                }
                else{
                    $c[$key] = $valueA.'/'. $b[$key];
                }
            }
            else{
                $c[$key] = "error nor string nor number";          
            }
        }
        else{
            $c[$key] = "error not same type";
        }

    }
    return $c;

}

    $arraySum = mergeSameArray($a,$b);
    print_r($arraySum);

答案 1 :(得分:0)

这是我的贡献,使用array_walk,并对合并规则做了一些假设:

$a = Array(
    'price' => 123,
    'category' => 'Fiction',
    'bookname' => 'Any-Book',
    'type' => 'Futuristic'
);
$b = Array (
    'price' => 145,
    'category' => 'Fantasy',
    'bookname' => 'Any-Book',
    'type' => 'Futuristic'
);

array_walk ($a,
    function (&$v, $k, $comp) {
        if (is_int($v)) {
            $v = $v + $comp[$k];
        } else {
            if ($comp[$k] != $v) {
                $v = "$v/" . $comp[$k];
            }
        }
    }, $b);

var_dump($a);

假设是:如果数组$a中的值为int,则将其与$b中的等值相加。如果该值不是int,请将其与$b中的等效值进行比较,如果匹配,请将其保留;否则与/连接。