2016-05-04 172 views
-3

我有這兩個數組:結合陣列的每個鍵和值與另一個陣列

$arr1 = Array (600 => 580, 500 => 480, 100 => 80) <- always 3 

$arr2 = Array ('filt' => grey, 'or' => 90) <- this array is dynamic 

我如何可以結合從第一陣列中的每個鍵和值與其他陣列?我的意思是,我需要:

$array = (600 => 580, 'filt' => grey, 'or' => 90) 
$array = (580 => 480, 'filt' => grey, 'or' => 90) 

先後在for/foreach循環中。我怎樣才能做到這一點? 非常感謝,即時通訊新的PHP ^^和我的英語很抱歉:P

+0

因此,您需要三個新的數組,每個數組都有一個用於第一個數組的元素,其餘的來自第二個數組?應該輸出什麼?數組或三個新的不同變量?更加詳細一些。 – mitkosoft

+0

@mitkosoft首先,感謝您的答覆。 Okey,我需要這樣做:foreach $ arr1(總是3)創建3個urls,每個必須是:第一個鍵和第一個數組的值與第二個數組的其餘部分。更具體地說,例如:第一個URL將是 - >?600 = 580&filt = gray&or = 90。下一個:?500 = 480&filt =灰色&或= 90 ...(我已經完成的構造函數)。所以我想我不需要在foreach中創建一個數組的數組,對吧?謝謝 – Jmack

+0

@Jmack,你是否只想要一個帶'$ array1'的數組,其中的key,value對添加到第二個'$ array'中? –

回答

0

我認爲你需要這個。只需循環遍歷第一個數組,將第一個數組複製到out數組中,並將key數組中的循環數組的值添加到out數組中。

至於你提到:

$array = (600 => 580, 'filt' => grey, 'or' => 90) 
$array = (580 => 480, 'filt' => grey, 'or' => 90) 

我認爲你需要每次都創建不同的陣列。對於第一個數組的每個 元素,您需要不同的數組作爲輸出。

$arr1 = array("600" => 580, "500" => 480, "100" => 80); 
$arr2 = array('filt' => "grey", 'or' => 90); 

$out = array(); 
foreach($arr1 as $key => $value){ 
    $out = $arr2; 
    $out[$key] = $value; 

    print_r($out); 
} 

結果

第一次迭代:

Array 
(
    [filt] => grey 
    [or] => 90 
    [600] => 580 
) 

第二次迭代:

Array 
(
    [filt] => grey 
    [or] => 90 
    [500] => 480 
) 

第三次迭代:

Array 
(
    [filt] => grey 
    [or] => 90 
    [100] => 80 
) 
+1

是啊!這就是我需要的!謝謝:)並且也非常感謝,儘管我的英語表達不好,但仍然試圖理解我。 – Jmack

0

試試這個:

$arr1 = array('600' => '580', '500' => '480', '100' => '80') ; 
$arr2 = array('filt' => 'grey', 'or' => '90'); 
$arra_new = array(); 
foreach($arr1 as $key=>$arr) { 
    $temp = $arr2; 
    $temp[$key] = $arr; 
    $arra_new[] = $temp; 
} 
print '<pre>';print_r($arra_new);exit; 
0

使用array_walkarray_replace功能的解決方案:

$arr1 = Array(600 => 580, 500 => 480, 100 => 80); 
$arr2 = Array('filt' => 'grey', 'or' => 90, 'and' => 150, 'if' => 10); 
$combined = []; 

array_walk($arr1, function($v, $k) use($arr2, &$combined) { 
    $combined[] = array_replace([$k => $v], $arr2); 
}); 

print_r($combined); 

的輸出:

Array 
(
    [0] => Array 
     (
      [600] => 580 
      [filt] => grey 
      [or] => 90 
      [and] => 150 
      [if] => 10 
     ) 

    [1] => Array 
     (
      [500] => 480 
      [filt] => grey 
      [or] => 90 
      [and] => 150 
      [if] => 10 
     ) 

    [2] => Array 
     (
      [100] => 80 
      [filt] => grey 
      [or] => 90 
      [and] => 150 
      [if] => 10 
     ) 
) 
+0

這是我需要的,但其他用戶給我另一個更簡單的答案,但這也可以爲我服務,謝謝! – Jmack

0

試試這個方法..

<?php 
$arr1 = array(600 => 580, 500 => 480, 100 => 80); 
$arr2 = array('filt' => 'grey', 'or' => 90); 

$newArray =array(); 
foreach($arr1 as $key =>$val) 
{ 
    $temp =array(); 
    $temp[$key]= $val; 
    $newArray[] =$temp+$arr2; 
} 

echo "<pre>"; print_r($newArray); 
?> 

這將輸出:

Array 
(
    [0] => Array 
     (
      [600] => 580 
      [filt] => grey 
      [or] => 90 
     ) 

    [1] => Array 
     (
      [500] => 480 
      [filt] => grey 
      [or] => 90 
     ) 

    [2] => Array 
     (
      [100] => 80 
      [filt] => grey 
      [or] => 90 
     ) 

) 
+0

@FrayneKonok,我檢查了OP的輸出,並忘記驗證我的輸出鍵「600 500 100」已被錯過......現在編輯了答案。 謝謝指點.. –

+0

是的,我看到並刪除了第一條評論。 –