2017-05-04 31 views
0

我有兩個數組,我希望結合,但是兩個數組中的值是相同的,但我仍然希望將它們結合起來。這可能嗎?PHP - 結合2個數組,其中密鑰是多次相同的

可以說我有以下的數組:

Array ([0] => 2683 [1] => 2683 [2] => 2683 [3] => 2683 [4] => 2683 [5] => 2683) 

Array ([0] => 2097152 [1] => 4194304 [2] => 6291456 [3] => 8391910 [4] => 234889216 [5] => 234889280) 

我用array_combine但隨後只顯示1個值。在這種情況下,我希望他們的關鍵允許重複,或至少帶他們在一個數組中,我可以簡單地循環他們。

這是可能的數組?還是有其他人有更好的解決方案?我必須稍後再循環它們並獲得匹配的值,這就是重點。 下面我的代碼,如果有幫助。

try { 
     $stmt = $pdo->prepare("SELECT deviceid, interfaceoid FROM poorten WHERE deviceid = '2683'"); 
     $stmt->execute(); 

     $deviceid = array(); 
     $interfaceoid = array(); 

     if($stmt->rowCount() > 0) { 
     while($row = $stmt->fetch()) { 
      //echo "" . $row['deviceid'] . " : "; 
      //echo "" . $row['interfaceoid'] . "</br>"; 

      $deviceid[]  = $row['deviceid']; 
      $interfaceoid[] = $row['interfaceoid']; 
     } 

     $result = array_combine($deviceid, $interfaceoid); 
     var_dump($result); 
     } 
    } 
    catch(PDOException $e) { 
     echo "Something went wrong: " . $e->getMessage() . ""; 
    } 
+0

我認爲你應該使用array_push。 – Zooly

+0

@Zooly,那不是我想要的。這隻會把他們聚集在一起,這不是我想要的。陣列1和陣列2有區別。 – vaxzz

+0

您的預期輸出是什麼? –

回答

2

使用deviceid作爲數組鍵:

$result = []; 
if ($stmt->rowCount() > 0) { 
    while ($row = $stmt->fetch()) { 

     if (!isset($result[$row['deviceid']])) { 
      $result[$row['deviceid']] = []; 
     } 

     $result[$row['deviceid']][] = $row['interfaceoid']; 
    } 
} 

var_dump($result); 
+0

非常感謝。多數民衆贊成我正在尋找,我仍然是很新的發展,並不知道如何去做。我還有1個問題,如果你不介意,我怎麼能通過這個foreach循環?也許這看起來像一個愚蠢的問題,但你的代碼目前有點難以理解。 – vaxzz

0

試試這個,爲live demolive demo

foreach($values as $k => $v) 
{ 
    $result[$keys[$k]][] = $v; 
} 
$result = array_map(function($v){return count($v) > 1 ? $v : $v[0];}, $result); 
相關問題