2016-10-11 4 views
0

Ich brauche Hilfe oder Ratschläge zum Hinzufügen oder Kombinieren des Array-Werts mit demselben Schlüssel.Array mit dem gleichen Wert hinzufügen

Zum Beispiel:

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

Durch viele Versuch war ich das Ergebnis, das ich es sein sollte erreichen wollte nicht in der Lage:

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

ich die beiden einfach kombinieren müssen sie im Wesentlichen das sind gleiche Sache oder musste gebündelt werden.

+0

Was ist der gleiche Schlüssel? Buchname? Was ist, wenn Typen anders sind? –

+0

Switch Cases basierend auf dem Typ des Elements 2 – Vanojx1

+0

Wird es jemals mehr als zwei Arrays zu kombinieren geben? Wird es jemals andere Schlüssel/Wert-Paare geben? –

Antwort

0

Hier ist mein Beitrag, mit array_walk und einigen Annahmen über die Regeln für die Zusammenführung machen:

$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); 

Die Annahmen sind: wenn der Wert im Array $aint ist, es dann mit dem entsprechenden Betrag in $b. Wenn der Wert nicht int ist, vergleichen Sie ihn mit dem Äquivalent in $b, und wenn es übereinstimmt, lassen Sie es in Ruhe; andernfalls verketten Sie mit /.

+1

Ihre Lösung ist viel eleganter als meine, aber Sie vergessen Schwimmer Typ –

+0

Vielen Dank! Wir haben identische Codes! Ich habe etwas an der Bedingung vermasselt. Das ist bei weitem die beste Antwort. Danke euch allen! –

1

Sie müssen von der Art Ihrer Arrays sicher sein, und dass sie die gleichen Schlüssel haben:

<?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); 
Verwandte Themen