显示依赖于另一个数组子成员的数组子项

时间:2020-01-13 13:33:03

标签: php arrays

我有一个数组,如果同一数组的名称在另一个数组中重复并且以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}

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);