我有两个数组,第一个有键,它们在第二个数组中作为值存在。我想识别第一个数组中的键,这些键作为值存在于第二个数组中。在第二个数组中,我想将值(即第一个数组中的键)更改为第一个数组中的键的值。
第一阵列
Array
(
**[sequence]** => 2344
**[imbarcode]** => DTTDTADDFDTADTDTAAATDFAFTTFDDAAFFFTTAADFADDDFATADADDFATDDDTDFTDFD
**[first]** => Lisa A
**[last]** => Dedrick
**[address]** => 4019 Nightington Dr
**[city]** => Province
**[st]** => PA
**[zip]** => 10059-1702
)
第二阵列
Array
(
[deleted_on] =>
[universe_id] => 1
[street] => **address**
[city] => **city**
[state] => **st**
[zip] => **zip**
[check_digit] => **sequence**
[carrier_route] => **imbarcode**
)
所需结果
Array
(
[deleted_on] =>
[universe_id] => 1
[street] => **4019 Nightington Dr**
[city] => **Province**
[state] => **PA**
[zip] => **10059-1702**
[check_digit] => **2334**
[carrier_route] => **DTTDTADDFDTADTDTAAATDFAFTTFDDAAFFFTTAADFADDDFATADADDFATDDDTDFTDFD**
)
可以使用多个foreach来完成此操作,但是我想找到一种更便宜的方法来执行此操作,因为实际上我们可能要映射大量数组。
全文
第一个数组是可能成千上万个数组(来自csv)中的一个。因此,如果我们在CSV中有50,000个订单项,那么我们将有49,999个数组。第二个数组将始终具有四个数组(它们将与数据库关联)。最终结果(在上面的csv示例中)应具有一个质量数组,其中包含4个子数组,其中每个子数组中都有49,999个数组。
但是,用PHP效率不高,这是我目前仅限于此的功能。
任何帮助是极大的赞赏。
编辑
这是我至少映射了值(不保留我需要的其他值)的原因
foreach ($data as $key => $val) {
foreach ($csv as $k => $v) {
foreach ($val as $dk => $dv) {
foreach ($v as $ck => $cv) {
if ($dv == $ck) {
$res[$dk] = $cv;
}
}
}
$result[$key][] = $res;
}
}
$this->out(print_r($result,true));
我不想重复很多次。
解决了。
解
foreach ($data as $key => $val) {
foreach ($csv as $ck => $cv) {
$result[$key][] = str_replace(array_keys($cv), $cv, $val);
}
}
我假设您使用**
来突出print_r
显示内容,而不是那样显示[**address**]
。但是str_replace
支持数组,因此请在第二个数组中搜索第一个数组中的键,并用第一个数组的值替换:
$result = str_replace(array_keys($first), $first, $second);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句