如何将这两个数组合并...如何合并这两个数组?
$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]
。