我有一个数组,如果同一数组的名称在另一个数组中重复并且以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
的{{1}}成员
此外,array2
中的course_id
必须与array1
中的id
相同
赞:
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
出场。我想在{{1}的array2
的{{1}}的{{1}}中以{{1}
答案 0 :(得分:1)
您可以只使用此代码
$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);