我有2個陣列中PHP7:PHP7:聯合兩個陣列,其中一個是鍵,第二個是值(整數),總和值重複鍵
$Array1 = ["bus","bus","int"];
$Array2 = [2,18,10];
其中$數組1是鍵和$ ARRAY2對於每個索引是值。
我需要將重複鍵的兩個值和總和相加,例如得到以下輸出:
$Array3 = ["bus" => 20, "int" => 10];
謝謝!
我有2個陣列中PHP7:PHP7:聯合兩個陣列,其中一個是鍵,第二個是值(整數),總和值重複鍵
$Array1 = ["bus","bus","int"];
$Array2 = [2,18,10];
其中$數組1是鍵和$ ARRAY2對於每個索引是值。
我需要將重複鍵的兩個值和總和相加,例如得到以下輸出:
$Array3 = ["bus" => 20, "int" => 10];
謝謝!
您需要的代碼就這麼簡單:
// The input arrays
$Array1 = ['bus', 'bus', 'int'];
$Array2 = [2, 18, 10];
// Build the result here
$Array3 = [];
// There is no validation, the code assumes that $Array2 contains
// the same number of items as $Array1 or more
foreach ($Array1 as $index => $key) {
// If the key $key was not encountered yet then add it to the result
if (! array_key_exists($key, $Array3)) {
$Array3[$key] = 0;
}
// Add the value associate with $key to the sum in the results array
$Array3[$key] += $Array2[$index];
}
print_r($Array3);
其輸出:
Array
(
[bus] => 20
[int] => 10
)
謝謝Axiac,這正是我一直在尋找的!完善! – Aleksey
我會做到的。我希望它對你有所幫助:你可以通過使用一個額外的數組來獲得你需要的輸出,首先,計算你的數組元素,這是你的條件。這個簡單的檢查
$Array1[$x] == $Array1[$x+1]
將檢查數組連續地址是否有相同的值。 (條件是陣列必須被排序),
,另一個值是這樣的:
$arr[$Array1[$x]] // assign a key
這是用於使得副陣列:
$Array1 = ["bus","bus","int"];
$Array2 = [2,18,10];
$arr = [];
for ($x = 0; $x < count($Array1); $x++) {
if($Array1[$x] == $Array1[$x+1])
{
$arr[$Array1[$x]] = $Array2[$x] + $Array2[$x+1];
$x++;
}
else
{
$arr[$Array1[$x]] = $Array2[$x];
}
}
輸出爲:
Array ([bus] => 20 [int] => 10)
感謝您使用此代碼段,這可能會提供一些即時幫助。通過說明爲什麼這是一個很好的解決方案的問題,可以大大提高(https://meta.stackexchange.com/q/114762)其教育價值,並且可以使未來的讀者更加有用,但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。 – GrumpyCrouton
只有相同的密鑰彼此相鄰時,此代碼纔有效。 '$ Array1 [$ x + 1]'在循環的最後一次迭代中不是有效的索引。 – SirDarius
數組必須排序 –
這一個可以工作:
$Array1 = ['bus', 'bus', 'int'];
$Array2 = [2, 18, 10];
# Let $Array3 be the required results array.
$Array3 = [];
for($j = 0; $j < count($Array1); $j += 1){
$k = $Array1[$j];
/*If the key already exists in $Array3 , add to it the value in the present key,
else just enter it as a new element. */
if(array_key_exists($k,$Array3)){ $Array3[$k] = $Array3[$k] + $Array2[$j];}
else {
# But first check that the length of $Array2 is not exceeded
if($j <= count($Array2)){
$Array3[$k] = $Array2[$j];
}
}
}
print_r($Array3);
# gives: Array ([bus] => 20 [int] => 10)
嗨,約翰,非常感謝您的及時答覆!在我的情況下,默認情況下Array1和Array2的長度相同,所以我使用@axiac中的代碼,但是您的解決方案完美無缺。特別是當需要長度驗證時。非常感謝你。 – Aleksey
如果沒有重複鍵,那麼你可以使用['array_combine()'](HTTP:// PHP。淨/手動/ EN/function.array-combine.php)。如果有重複鍵,那麼['array_map()'](http://php.net/manual/en/function.array-map.php)是一個可能的解決方案。在這兩種情況下,一個普通的'foreach'循環都可以完成這項工作。你嘗試過什麼嗎? – axiac