<?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 ?>
- Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- <h2>graphic</h2>
<p>internal_evidence</p>
<p>technical_evidence</p>
<small>course price : 150</small>
<small>314</small>
<h2>3dmax</h2>
<small>course price : 300</small>
<small>300</small>
<h2>ICDL</h2>
<p>internal_evidence</p>
<small>course price : 480</small>
<small>490</small>
preferences:
138.89 ms | 408 KiB | 5 Q