如何將這兩個數組合並...如何合併這兩個數組?
$arr1 = array(
[0] => 'boofoo',
[1] => '2'
);
$arr2 = array(
[0] => 'fbfb',
[1] => '6'
);
獲得第三陣列如下?:
$arr3 = array(
[0] => 'boofoo',
[1] => '6'
);
也就是說,保留那些長的字符串和較高的數值。
如何將這兩個數組合並...如何合併這兩個數組?
$arr1 = array(
[0] => 'boofoo',
[1] => '2'
);
$arr2 = array(
[0] => 'fbfb',
[1] => '6'
);
獲得第三陣列如下?:
$arr3 = array(
[0] => 'boofoo',
[1] => '6'
);
也就是說,保留那些長的字符串和較高的數值。
我認爲你可以通過http://www.php.net/manual/en/function.array-walk.php來實現。
我盡力爲它寫一些測試並更新文章。
P.S: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()
如果兩個數組有相同的鍵,你可以做一個簡單的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
is the conditional operator,其中表達expr2
或expr3
是基於expr1
返回值進行評估。因此,如果strlen($val) > strlen($arr2[$key])
爲真,則條件操作評估$val
和$arr2[$key]
。