学堂 学堂 学堂公众号手机端

PHP二维数组相关应用(1)

lewis 1年前 (2024-03-13) 阅读数 6 #技术


问题:如何由二维数组 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>';

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门