我有一个这样的数组:
$array = [
['record' => 1, 'sponsor' => 2, 'email' => 'some@email.com'],
['record' => 2, 'sponsor' => 2, 'email' => 'some1@email.com'],
['record' => 3, 'sponsor' => 2, 'email' => 'some2@email.com'],
['record' => 4, 'sponsor' => 2, 'email' => 'some3@email.com'],
];
每一行都有一个唯一的record
和email
,而sponsor
键与record
相关。因此,我尝试将sponsor
键的值替换为基于record
的对应email
,而不是整数,如下所示:
$array = [
['record' => 1, 'sponsor' => 'some1@email.com', 'email' => 'some@email.com'],
['record' => 2, 'sponsor' => 'some1@email.com', 'email' => 'some1@email.com'],
['record' => 3, 'sponsor' => 'some1@email.com', 'email' => 'some2@email.com'],
['record' => 4, 'sponsor' => 'some1@email.com', 'email' => 'some3@email.com'],
];
我尝试过使用foreach
循环,但没有给予预期的结果:
$yes = [];
foreach ($array as $key => $arr) {
if ( ! empty($arr['sponsor']) ) {
if ( $arr['sponsor'] == $array[$key]['record'] ) {
$yes[] = ['sponsor' => $array[$key]['email']];
}
}
$yes[] = [
'record' => $array[$key]['record'],
'email' => $array[$key]['email'],
'sponsor' => $array[$key]['sponsor'],
];
}
print_r($yes);
2条答案
按热度按时间tf7tbtn21#
由于
record
是唯一的,我建议使用这个值作为键来重建$arr
。4xy9mtcn2#
创建一个查找数组,将
record
值作为键,将email
值作为值,然后根据相应的查找值覆盖每行中的主办方值。代码:(Demo)
或者搭配经典循环:(Demo)
如果在查找中可能找不到给定的
sponsor
值,则在尝试访问查找数组时使用$lookup[$row['sponsor']] ?? 'some fallback'
。这样就不会生成警告/错误。这是检查isset()
的一种更简洁的方法。请记住,在这种情况下使用the array union operator won't work properly。