所以我有两个数组
Array
(
[0] => test
[1] => test 1
[2] => test 2
[3] => test 3
)
和
Array
(
[0] => test
[1] => test 1
[2] => test 2
[3] => test 3
)
我想将它们组合在一起,所以我得到这样的数组?
Array
(
[0] => test test
[1] => test 1 test 1
[2] => test 2 test 2
[3] => test 3 test 3
)
我找到了许多功能,例如array_merge
和array_combine
,但没有任何功能可以完成我想做的事。
有什么想法吗?
提前致谢。
最高
答案 0 :(得分:4)
您可以使用array_map
执行此操作:
$combined = array_map(function($a, $b) { return $a . ' ' . $b; }, $a1, $a2));
答案 1 :(得分:1)
如果您使用Php 5.3.0 +:
,这是一个单行解决方案$result = array_map(function ($x, $y) { return $x.$y; }, $array1, $array2);
答案 2 :(得分:0)
通过它循环创建一个新数组。没有内置功能。欢迎来到精彩的编程世界:)
提示:
答案 3 :(得分:0)
没有内置功能(我知道)可以实现这一目标。使用循环:
$combined = array();
for($i = 0, $l = min(count($a1), count($a2)); $i < $l; ++$i) {
$combined[$i] = $a1[$i] . $a2[$i];
}
根据您的喜好调整循环:仅连接最小数量的元素,如果其中一个数组较短,则连接空字符串等。
答案 4 :(得分:0)
你可以像
那样做for($i; $i<count($a); $i++)
{
$arr[$i] = $a[$i]." ".$b[$i];
}
答案 5 :(得分:0)
只需循环并将连接分配给新数组:
$array1=array("test","test 1","test 2","test 3");
$array2=array("x","y","z","w");
$new_array=array();
foreach (range(0,count($array1)-1) as $i)
{
array_push($new_array,$array1[$i] . $array2[$i]);
}
答案 6 :(得分:0)
假设两个数组是$ array1和$ array2
for($x = 0; $x < count($array2); $x++){
$array1[$x] = $array1[$x] . ' ' . $array2[$x];
}
答案 7 :(得分:0)
如果您有来自两个不同查询的数据并且它们变成两个不同的数组,那么将它们组合并不总是答案。
当放入数组([])时,它们可以用foreach循环来计算多少,然后循环在一起。
注意:它们必须在每个数组中具有相同的数量,或者可以在另一个数组之前完成...... ..
foreach ($monthlytarget as $value) {
// find how many results there were
$loopnumber++;
}
echo $loopnumber;
for ($i = 0; $i < $loopnumber; $i++) {
echo $shop[$i];
echo " - ";
echo $monthlytarget[$i];
echo "<br>";
}
然后会显示: -
Tescos - 78
Asda - 89
Morrisons - 23
Sainsburys - 46
您甚至可以添加计数来显示此列表项目编号....
答案 8 :(得分:0)
许多答案都推荐使用array_map
方法,还有许多更简单的for
循环方法。
我认为array_map
解决方案比在for
循环中遍历数组并建立连接的数组看起来更好和“更高级”,但是-与我的预期相反-它比常规的for
。
我已经在ubuntu 16.04.1上使用PHP版本7.1.23-4运行了一些测试:两个数组每个包含250k个10位随机数的元素,一个for
解决方案花了4.7004秒的时间进行了20次运行,而array_map
解决方案在我的计算机上运行20次需要11.7939秒,几乎慢了2.5倍!!!
我希望PHP可以比array_map
循环更好地优化内置for
功能,但是看起来却相反。
我测试过的代码:
// Init the test
$total_time_for = 0;
$total_time_arraymap = 0;
$array1 = [];
$array2 = [];
for ( $i = 1; $i <= 250000; $i ++ ) {
$array1[] = mt_rand(1000000000,9999999999);
$array2[] = mt_rand(1000000000,9999999999);
}
// Init completed
for ( $j = 1; $j <= 20; $j ++ ) {
// Init for method
$array_new = [];
$startTime = microtime(true);
// Test for method
for ( $i = 0; $i <= count($array1); $i ++ ) {
$array_new[] = $array1[$i] . " " . $array2[$i];
}
// End of test content
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
$total_time_for += $elapsed;
//echo "for - Execution time : $elapsed seconds" . "\n";
unset($array_new);
//----
// Init array_map method
$array_new = [];
$startTime = microtime(true);
// Test array_map method
$array_new = array_map(function($a, $b) { return $a . ' ' . $b; }, $array1, $array2);
// End of test content
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
$total_time_arraymap += $elapsed;
//echo "array_map - Execution time : $elapsed seconds" . "\n";
unset($array_new);
}
echo "for - Total execution time : $total_time_for seconds" . "\n";
echo "array_map - Total execution time : $total_time_arraymap seconds" . "\n";
出现问题而不是array_map
有什么用?我想到的一个可能的答案是,如果我们在某个地方(例如在3rd party库中)有一个预定义的函数,我们想将其应用于数组,而又不想在我们的for循环中重新实现该函数。在这种情况下,array_map
似乎很方便,可以将该函数应用于我们的数组。但这比从for
循环调用函数好吗?
我也对此进行了测试,看起来array_map
在使用预定义函数时确实很出色。这次array_map
花了8.7176秒,而for
循环花了12.8452秒来完成与上述相同的工作。
我测试过的代码:
// Init the test
$total_time_for = 0;
$total_time_arraymap = 0;
$array1 = [];
$array2 = [];
for ( $i = 1; $i <= 250000; $i ++ ) {
$array1[] = mt_rand(1000000000,9999999999);
$array2[] = mt_rand(1000000000,9999999999);
}
function combine($a, $b) {
return $a . ' ' . $b;
}
// Init completed
for ( $j = 1; $j <= 20; $j ++ ) {
// Init for method
$array_new = [];
$startTime = microtime(true);
// Test for method
for ( $i = 0; $i <= count($array1); $i ++ ) {
$array_new[] = combine($array1[$i], $array2[$i]);
}
// End of test content
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
$total_time_for += $elapsed;
//echo "for external function call - Execution time : $elapsed seconds" . "\n";
unset($array_new);
//----
// Init array_map method
$array_new = [];
$startTime = microtime(true);
// Test array_map method
$array_new = array_map('combine', $array1, $array2);
// End of test content
$endTime = microtime(true);
$elapsed = $endTime - $startTime;
$total_time_arraymap += $elapsed;
//echo "array_map external function call - Execution time : $elapsed seconds" . "\n";
unset($array_new);
}
echo "for external function call - Total execution time : $total_time_for seconds" . "\n";
echo "array_map external function call - Total execution time : $total_time_arraymap seconds" . "\n";
长话短说,一般结论:
array_map
,可节省约40%的时间(8.7秒vs. 12.8秒)for
循环,可节省约60%的时间(4.7秒vs. 11.8秒)。for
循环并在循环内实施所需的操作,所需时间减少了约45%(4.7秒vs. 8.7秒)。基于此,在您的特定用例中,使用for
循环并在循环体内进行串联,而无需调用其他函数。