php的匿名函数实现递归查询


php的匿名函数实现递归查询


// demo
$test = NULL;
$test = function ($a) use (&$test) {
  echo $a;
  $a --;

  if ($a > 0) {
     return $test($a);
  }
};
$test(10);

// 数量大于12个,每种风格搭配推荐不超过2个,如果处理后不及12个,递归循环补位
$list= [
 ['style_code'=>1, 'name' => '风格1'],
 ['style_code'=>1, 'name' => '风格1'],
 ['style_code'=>1, 'name' => '风格1'],
 ['style_code'=>2, 'name' => '风格2'],
 ['style_code'=>2, 'name' => '风格2'],
 ['style_code'=>3, 'name' => '风格3'],
 ['style_code'=>3, 'name' => '风格3'],
 ['style_code'=>3, 'name' => '风格3'],
 ['style_code'=>3, 'name' => '风格3'],
 ['style_code'=>3, 'name' => '风格3'],
 ['style_code'=>4, 'name' => '风格4'],
 ['style_code'=>4, 'name' => '风格4'],
 ['style_code'=>4, 'name' => '风格4'],
 ['style_code'=>4, 'name' => '风格4'],
 ['style_code'=>5, 'name' => '风格5'],
 ['style_code'=>5, 'name' => '风格5'],
 ['style_code'=>5, 'name' => '风格5'],
];
$doneArr = $removeArr = $styleArr = [];
$func = function ($list, &$doneArr, $removeArr, $styleArr) use (&$func) {
  foreach ($list as $value) {
     if (count($doneArr) == 12) {
        break;
     }
     isset($styleArr[$value['style_code']]) ? $styleArr[$value['style_code']]++ : $styleArr[$value['style_code']] = 1;
     if ($styleArr[$value['style_code']] < 3) {
        $doneArr[] = $value;
     } else {
        $removeArr[] = $value;
     }
  }
  if (count($doneArr) < 12) {
     $list = $removeArr;
     $removeArr = $styleArr = [];
     $func($list, $doneArr, $removeArr, $styleArr);
  }

  return $doneArr;
};
$response = $func($list, $doneArr, $removeArr, $styleArr);
var_dump($response);


版权及转载说明

本站原创、转载文章欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区

本站转载文章版权归原作者所有,如发现本站文章涉嫌侵权请点击「联系我们」反馈,本站将立即给予删除

转载请注明:文章转载自:全分享社区 「http://www.aweb.cc

本文标题:php的匿名函数实现递归查询

本文地址:http://www.aweb.cc/article/detail/id/678.html

Linux多服务器操作 <<上一篇