php - 显示依赖于另一个数组子成员的数组子项
问题描述
我有一个数组,如果同一个数组的名称在另一个数组中重复并具有值,我想显示数组true
值
我的数组是这样的
$array1 = [
array(
'id' => 1
'name' => internal_evidence
'price' => 30
'course_id' => 3
),
array(
'id' => 2
'name' => international_evidence
'price' => 450
'course_id' => 3
),
array(
'id' => 3
'name' => internal_evidence
'price' => 10
'course_id' => 1
),
array(
'id' => 4
'name' => technical_evidence
'price' => 134
'course_id' => 3
),
];
$array2 = [
array(
'id' => 3
'name' => graphic
'price' => 150
'attr' => array(
'internal_evidence' => 'true',
'international_evidence' => 'false',
'technical_evidence' => 'true'
)
),
array(
'id' => 5
'name' => 3dmax
'price' => 300
'attr' => array(
)
),
array(
'id' => 1
'name' => ICDL
'price' => 480
'attr' => array(
'internal_evidence' => 'true',
)
),
];
我想访问并显示所有attr
具有价值true
的成员array2
此外,course_id
fromarray1
必须与id
in相同array2
像这样:
<p>internal_evidence with id=1 and price=30 </p>
<p>technical_evidence with id=4 and price=134 </p>
<p>internal_evidence with id=3 and price=10 </p>
我试过这段代码,但它不能正常工作
$array1ByIdAndName = array_reduce($array1, static function ($byIdAndName, $entry) {
$byIdAndName[$entry['product_id']][$entry['e_name']] = $entry;
return $byIdAndName;
});
$array2 = array_map(static function ($entry) use ($array1ByIdAndName) {
$entry['total_price'] = $entry['price'];
$entry['attr'] = array_reduce(array_keys($entry['attr']), static function ($attrs, $attrName) use ($array1ByIdAndName, &$entry) {
if ($entry['attr'][$attrName] === 'true') {
$attrs[] = $attrName;
$entry['total_price'] += $array1ByIdAndName[$entry['id']][$attrName]['price'];
}
return $attrs;
}, []);
return $entry;
}, $array2);
你应该知道我不想id
在array1
和中显示array2
。我想course_id
在会员中array1
显示array2
真正的价值attr
array2
解决方案
你可以使用这个代码
$array1ByIdAndName = array_reduce($array1, static function ($byIdAndName, $entry) {
$byIdAndName[$entry['course_id']][$entry['name']] = $entry;
return $byIdAndName;
});
$array2 = array_map(static function ($entry) use ($array1ByIdAndName) {
$entry['total_price'] = $entry['price'];
$entry['attr'] = array_reduce(array_keys($entry['attr']), static function ($attrs, $attrName) use ($array1ByIdAndName, &$entry) {
if ($entry['attr'][$attrName] === 'true') {
$attrs[] = $attrName;
$entry['total_price'] += $array1ByIdAndName[$entry['id']][$attrName]['price'];
$entry[$attrName] = $array1ByIdAndName[$entry['id']][$attrName]['price'];
}
return $attrs;
}, []);
return $entry;
}, $array2);
echo '<pre>';
print_r($array2);
推荐阅读
- php - Magento 迁移到 AWS 后的问题
- javascript - 制作一个 jQuery-ui Slider 以使用日期值自动滑动
- java - Java内部方法和本机方法有什么区别?
- runtime - *帮助*确定程序的运行时间
- php - FUELPHP 数据库异常:- 一般错误:20018 从字符串转换日期和/或时间时转换失败
- rest - 如何从 api 调用获取响应并在 .netcore 的其他端点中使用相同的响应?
- python - 我无法在 Python 上加载带有特殊字符的歌曲
- c# - 使用asp.net核心身份DefaultUI时如何在成功注册时运行代码?
- javascript - 无服务器(aws-node):从不同的文件调用函数返回内部服务器错误
- javascript - 绑定到对象的 Vue.js 类在对象更新时没有改变