首页 > 解决方案 > 显示依赖于另一个数组子成员的数组子项

问题描述

我有一个数组,如果同一个数组的名称在另一个数组中重复并具有值,我想显示数组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_idfromarray1必须与idin相同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);

你应该知道我不想idarray1和中显示array2。我想course_id在会员中array1显示array2真正的价值attrarray2

标签: phparrays

解决方案


你可以使用这个代码


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

推荐阅读