首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在本例中,“添加”数组的最佳方法

在本例中,“添加”数组的最佳方法
EN

Stack Overflow用户
提问于 2013-08-08 15:40:04
回答 4查看 146关注 0票数 1

我有两个相同维度的数组。数组中的每个值都是一个数字ab

获得相同维度的$array3的最快方法是:

如果这两个值都是a,

如果这两个值都是b,

如果值不同,则为0。

代码语言:javascript
复制
$array1 = array(a,b,b,a,a,b,a,b,a,a,b,b,a);
$array2 = array(a,b,a,b,a,a,b,a,b,b,a,b,a);
==================
$array3 = array(a,b,0,0,a,0,0,0,0,0,0,b,a);

至于性能,我相信使用循环语句不是最好的方法。

我相信像60&13 = 12这样的东西可以以适当的方式使用,但我既不知道如何将它用于数组,也不知道如何将它用于大数字(如果数组很大的话)。或者,使用匿名函数是最好的?

对于最好的(但并非最不重要的)解决方案,有什么想法吗?谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-08 15:45:23

一个循环几乎肯定是这里最好的方法。你不需要任何花哨的东西

代码语言:javascript
复制
$items = min(count($array1), count($array2));
$array3 = array_fill(0, $items, 0); // initialize as all zeroes

for($i = 0; $i < $items; ++$i) {
    if ($array1[$i] === $array2[$i]) {
        $array3[$i] = $array1[$i];
    }
}

这将比array_map快得多,因为函数调用在PHP中相对昂贵。

如果你想要比这更好的性能,那么你的首要考虑应该是用SplFixedArray代替$array3

代码语言:javascript
复制
$array3 = new SplFixedArray($items); // and the rest as above
票数 5
EN

Stack Overflow用户

发布于 2013-08-08 15:43:34

您可以使用array_map

代码语言:javascript
复制
$array3 = array_map(function($x, $y) {
    return $x == $y ? $x : 0;
}, $array1, $array2);
票数 4
EN

Stack Overflow用户

发布于 2013-08-08 15:55:21

我想添加一个替代方法,使用array_diff_assoc

代码语言:javascript
复制
$temp = array_diff_assoc($array1,$array2); //array of elements in array1 that aren't the same as array2
$temp = array_combine(array_keys($temp),array_pad(array(),count($temp),0)); //replace the values with 0s
$array3 = $temp + $array2; //merge the arrays
ksort($array3); //put the elements back in order
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18130307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档