php 按索引合并两个数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9541598/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Merging two arrays by index
提问by Kerri
Okay, if feel like this should be really simple and accomplished by a function like array_merge()
or array_merge_recursive
, but I can't quite figure it out. I have two simple arrays structured like the (simplified) example below. I simply want to merge them into one array based on their index.
好吧,如果觉得这应该很简单,并且可以通过像array_merge()
or 之类的函数来完成array_merge_recursive
,但我不太明白。我有两个简单的数组,其结构类似于下面的(简化的)示例。我只是想根据它们的索引将它们合并到一个数组中。
$array 1:
$数组1:
Array (
[0] => Array (
[ID] => 201
[latLng] => 45.5234515, -122.6762071
)
[1] => Array (
[ID] => 199
[latLng] => 37.7931446, -122.39466520000002
)
)
et cetera…
等等…
$array2 :
$array2 :
Array (
[0] => Array (
[distance] => 1000
[time] => 10
)
[1] => Array (
[distance] => 1500
[time] => 15
)
)
$desiredResult :
$desiredResult :
Array (
[0] => Array (
[ID] => 201
[latLng] => 45.5234515, -122.6762071
[distance] => 1000
[time] => 10
)
[1] => Array (
[ID] => 199
[latLng] => 37.7931446, -122.39466520000002
[distance] => 1500
[time] => 15
)
)
When I try to merge these using merge functions, I can only get this:
当我尝试使用合并函数合并这些时,我只能得到这个:
$unDesiredResult:
$unDesiredResult:
Array (
[0] => Array (
[ID] => 201
[latLng] => 45.5234515, -122.6762071
)
[1] => Array (
[ID] => 199
[latLng] => 37.7931446, -122.39466520000002
)
[2] => Array (
[distance] => 1000
[time] => 10
)
[3] => Array (
[distance] => 1500
[time] => 15
)
)
Do I need to loop through to push the second set into the first, or can this be done with an existing function?
我是否需要循环将第二组推入第一组,还是可以使用现有函数完成?
回答by Rocket Hazmat
I don't think there is a function to do this for you, you're gonna have to loop.
我不认为有一个函数可以为你做这件事,你将不得不循环。
$result = array();
foreach($array1 as $key=>$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other array
$result[$key] = $val + $val2; // combine 'em
}
Or you can push the data into $array1, so you need to make a 3rd array:
或者您可以将数据推入 $array1,因此您需要制作第三个数组:
foreach($array1 as $key=>&$val){ // Loop though one array
$val2 = $array2[$key]; // Get the values from the other array
$val += $val2; // combine 'em
}
回答by Ryan P
You'll need to use a loop. Try creating a function:
你需要使用一个循环。尝试创建一个函数:
function addArray( array &$output, array $input ) {
foreach( $input as $key => $value ) {
if( is_array( $value ) ) {
if( !isset( $output[$key] ) )
$output[$key] = array( );
addArray( $output[$key], $value );
} else {
$output[$key] = $value;
}
}
}
Then:
然后:
$combinedArray = array( );
addArray( $combinedArray, $array1 );
addArray( $combinedArray, $array2 );
回答by Ryan P
example Arrays has to be merged:
示例数组必须合并:
[location_coordinates] => Array
(
[0] => 36.037939100000,-78.905221600000
[1] => 36.004398400000,-78.936084600000
)
[tm_field_reference_locations$field_location_address$city] => Array
(
[0] => Durham
[1] => Durham
)
[doctor_city] => Array
(
[0] => Durham
[1] => Durham
)
[tm_field_reference_locations$field_location_address$street] => Array
(
[0] => 407 Crutchfield Street
[1] => 40 Duke Medicine Circle
)
[tm_field_reference_locations$field_office_phone] => Array
(
[0] => 919-479-4120
[1] => 919-613-0444
)
[sm_field_reference_locations$title] => Array
(
[0] => Duke Regional Hospital Spine and Neurosciences
[1] => Duke Spine Center
)
When you loop like below:
当你像下面这样循环时:
$address= array();
for($n=0; $n<sizeof($kolDetails['location_coordinates']); $n++){
$address[$n]['org_institution_id']=$kolDetails['sm_field_reference_locations$title'][$n];
$address[$n]['longitude']=$kolDetails['location_coordinates'][$n];
$address[$n]['City']=$kolDetails['doctor_city'][$n];
$address[$n]['address1']=$kolDetails['tm_field_reference_locations$field_location_address$street'][$n];
$address[$n]['phone_number']=$kolDetails['tm_field_reference_locations$field_office_phone'][$n];
}
$kolextra['adress']=$address;
pr($kolextra['adress']);
$address = array();
回答by AshBrad
I'd go about this slightly differently with an interval. This assumes your values are always locked and that the first record of array1 always corresponds with the first record of array2:
我会以稍有不同的间隔来处理这个问题。这假设您的值始终处于锁定状态,并且 array1 的第一条记录始终对应于 array2 的第一条记录:
$i = 0; // sets counter
$end = count($array1); // finds record number
while($i <= $end){ //for each record in the array
$array1[$i]['distance'] = $array2[$i]['distance']; //match up array values
$array1[$i]['time'] = $array2[$i]['time']; //match up array values
$i++; //iterate
}
Good Luck!
祝你好运!