请注意,我感谢您的答复。很抱歉回答迟到,自发布此消息以来我一直生病,而且我不清楚这个例子是否很清楚。让我们再试一次:
使用PHP,我有两个二维的关联数组,我想将所有字段组合成一个数组,请参见下面的示例
$ary_0[0]['name'] = 'Bobby', $ary_0[0]['address'] = '123 E Park Place'
$ary_0[1]['name'] = 'Chris', $ary_0[1]['address'] = '13 Bonanza Trail'
$ary_0[2]['name'] = 'Sally', $ary_0[2]['address'] = '97 West 3rd Ave.'
$ary_1[0]['name'] = 'Bobby', $ary_1[0]['phone'] = '555-555-1212'
$ary_1[1]['name'] = 'Chris', $ary_1[1]['phone'] = '222-555-1212'
$ary_1[2]['name'] = 'Sally', $ary_1[2]['phone'] = '999-555-1212'
使结果数组看起来像
$ary_2[0]['name'] = 'Bobby', $ary_2[0]['address'] = '123 E Park Place', $ary_2[0]['phone'] = '555-555-1212'
$ary_2[1]['name'] = 'Chris', $ary_2[1]['address'] = '13 Bonanza Trail', $ary_2[1]['phone'] = '222-555-1212'
$ary_2[2]['name'] = 'Sally', $ary_2[2]['address'] = '97 West 3rd Ave.', $ary_2[2]['phone'] = '999-555-1212'
请注意,两个阵列已经按名称排序,并且名称字段是两个阵列上的联接。实际上,该数据是从两个不同的数据库中提取的,并且通常无法以表的形式进行连接,但这就是我要寻求的效果。
PHP中是否有一个函数可以像这样合并这两个数组?我到处都是文献,但是除了强行使用名称值来寻找匹配项之外,找不到其他可行的解决方案。 有人在那里有一个优雅而简单的解决方案吗?我不相信array_merge()会起作用...
TIA, 迈克
答案 0 :(得分:0)
由于它们已经按名称排序,您可以进行for循环并使用array_merge吗?
Private Sub TransferData()
Dim cellCount as long
Dim cell as range
Dim rangeToCopy as range
For each cell in Sheets("sheet1").Range("A1:A6").SpecialCells(xlCellTypeConstants) ' 23 is unnecessary, as you get all XlSpecialCellsValue constants by default
' See https://docs.microsoft.com/en-us/office/vba/api/excel.range.specialcells
cellCount = cellCount + cell.cells.count
If not (rangeToCopy is nothing) then
Set rangeToCopy = application.union(rangeToCopy, cell)
Else
Set rangeToCopy = cell
End if
If cellCount = 3 then exit for
Next cell
If not (rangeToCopy is nothing) then
rangeToCopy.copy
Sheets("sheet2").Range("A1").PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
End if
End Sub
答案 1 :(得分:0)
假设您的代码只是一些伪代码,因此可以重写数组,以使每个人都更加清楚,而忽略了语法和重复的键错误。
$ary=[
['name'=>'Bobby','address'=>'123 E Park Place'],
['name'=>'Chris','address'=>'13 Bonanza Trail'],
['name'=>'Sally','address'=>'97 West 3rd Ave.'],
['name'=>'Bobby','phone'=>'555-555-1212'],
['name'=>'Chris','phone'=>'222-555-1212'],
['name'=>'Sally','phone'=>'999-555-1212']
];
这将为您提供几乎您目前的财产。
无法使用内置函数来完成此操作,这太具体了。 但是解决这个问题很简单。
$newArray=[];
foreach($ary as $key=>$val) {
$found=false;
foreach($newArray as $nKey=>$nVal) {
if($nVal['name']==$val['name']) {
$found=true;
$newArray[$nKey]=array_merge($nVal,$val);
break;
}
}
if(!$found) $newArray[]=$val;
}
如果元素太多,需要更有效的方法,则应该重新设计数组或实现其他搜索算法,或者使用带有索引的数据库。
请注意,[]
表示法仅适用于PHP +5.4。