[英]How to merge these two arrays?
如何合並這兩個數組...
$arr1 = array(
[0] => 'boofoo',
[1] => '2'
);
$arr2 = array(
[0] => 'fbfb',
[1] => '6'
);
得到第三個數組如下:
$arr3 = array(
[0] => 'boofoo',
[1] => '6'
);
即,保留較長的字符串和較高的數值。
如果兩個數組具有相同的鍵,則可以執行簡單的foreach
並根據分別與>
和strlen
有關的關系來選擇更好的值:
$arr3 = array();
foreach ($arr1 as $key => $val) {
if (array_key_exists($key, $arr2)) {
if (is_numeric($val)) {
$arr3[$key] = max($val, $arr2[$key]);
} else {
$arr3[$key] = strlen($val) > strlen($arr2[$key]) ? $val : $arr2[$key];
}
}
}
在您問: expr1 ? expr2 : expr3
expr1 ? expr2 : expr3
是條件運算符 ,其中基於expr1
的返回值對表達式expr2
或expr3
進行求expr1
。 因此,如果strlen($val) > strlen($arr2[$key])
為true,則條件運算的結果$val
,否則$arr2[$key]
。
我認為您可以通過http://www.php.net/manual/en/function.array-walk.php來實現。
我會嘗試為此編寫一些測試並更新帖子。
PS: array_map更好(也許步行甚至不行嗎?)
<?php
function combine($arr1, $arr2) {
return array_map("callback", $arr1, $arr2);
}
function callback($item, &$item2) {
if (is_numeric($item)) {
return max($item, $item2);
}
if (strlen($item2) > strlen($item)) {
return $item2;
}
return $item;
}
class Tests extends PHPUnit_Framework_TestCase {
public function testMergingArrays() {
$arr1 = array(
'boofoo',
'2'
);
$arr2 = array(
'fbfb',
'6'
);
$arr3 = array(
'boofoo',
'6'
);
$this->assertEquals($arr3, combine($arr1, $arr2));
}
}
我已經進行了測試,現在可以重構它了。 但是這種實現確實有效。
您可以使用array_merge()
函數,然后再進行sort()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.