PHP二维数组相关应用(1)
问题:如何由二维数组 a、b、c 得到 d
$a= array(
array(
'name' =>'vip',
'aname'=>'123',
'sex'=>1
),
array(
'name' =>'vip1',
'aname'=>'1233',
'sex'=>11
),
);
$b = array(
array(
'name' =>'douyin',
'aname'=>'123',
'age'=>189
),
array(
'name' =>'cs',
'aname'=>'123',
'age'=>89
),
array(
'name' =>'vip1',
'aname'=>'1233',
'age'=>8
),
);
$c = array(
array(
'name'=>'baidu',
'aname'=>'du',
'count'=>10
),
array(
'name'=>'baidu123',
'aname'=>'du',
'count'=>10
),
array(
'name' =>'cs',
'aname'=>'123',
'count'=>89
),
);
$d = array(
array(
'name' =>'vip',
'aname'=>'123',
'sex'=>1,
'age'=>0,
'count'=>0
),
array(
'name' =>'vip1',
'aname'=>'1233',
'sex'=>11,
'age'=>8,
'count'=>0
),
);
问题分析&解决思路:
将a、b、c数组通过array_column函数变成以name字段为键名的数组a、b、c,遍历a数组,判断a中键名是否出现在b、c键名中;如果出现则使用 键名=>键值 进行数组合并(+操作:前者覆盖后者),如果未出现则用 键名=>空值 进行合并。
解决代码:
//获取到b、c的字段
$bk = array_keys($b[0]);
$ck = array_keys($c[0]);
//通过array_column函数变成以name字段为键名的新数组
$a = array_column($a,NULL,'name');
$b = array_column($b,NULL,'name');
$c = array_column($c,NULL,'name');
//键名=>空值
for($i=0;$i<count($bk);$i++){
$btmp[$bk[$i]]=0;
}
for($i=0;$i<count($ck);$i++){
$ctmp[$ck[$i]]=0;
}
//判断a中键名是否出现在b、c键名中
foreach($a as $key=>$vo){
$b_has = in_array($key,array_keys($b));
$c_has = in_array($key,array_keys($c));
if ( $b_has && $c_has ){
$list[] = $vo+$b[$key]+$c[$key];
}
if ( $b_has && !$c_has ){
$list[] = $vo+$b[$key]+$ctmp;
}
if ( !$b_has && $c_has ){
$list[] = $vo+$c[$key]+$btmp;
}
if ( !$b_has && !$c_has ){
$list[] =$vo+$btmp+$ctmp;
}
}
echo '<pre>';
print_r($list);
echo '</pre>';
版权声明
本文仅代表作者观点,不代表博信信息网立场。