<?php $array1 = [
[
'name' => 'internal_evidence',
'price' => 30,
'course_id' => 3
],
[
'name' => 'international_evidence',
'price' => 450,
'course_id' => 3
],
[
'name' => 'internal_evidence',
'price' => 10,
'course_id' => 1
],
[
'name' => 'technical_evidence',
'price' => 134,
'course_id' => 3
],
];
$array2 = [
[
'id' => 3,
'name' => 'graphic',
'price' => 150,
'attr' => [
'internal_evidence' => 'true',
'international_evidence' => 'false',
'technical_evidence' => 'true'
]
],
[
'id' => 5,
'name' => '3dmax',
'price' => 300,
'attr' => [
]
],
[
'id' => 1,
'name' => 'ICDL',
'price' => 480,
'attr' => [
'internal_evidence' => 'true',
]
],
];
$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'];
}
return $attrs;
}, []);
return $entry;
}, $array2);
?>
<?php foreach ($array2 as $entry): ?>
<h2><?= $entry['name'] ?></h2>
<?php foreach ($entry['attr'] as $attrName): ?>
<p><?= $attrName ?></p>
<?php endforeach ?>
<small>course price : <?= $entry['price'] ?></small>
<?php if ($entry['total_price'] > 0): ?>
<small><?= $entry['total_price'] ?></small>
<?php endif ?>
<?php endforeach ?>
preferences:
120.5 ms | 406 KiB | 5 Q