作者 lyh

gx脚本

@@ -74,19 +74,40 @@ class UpdateKeyword extends Command @@ -74,19 +74,40 @@ class UpdateKeyword extends Command
74 return false; 74 return false;
75 } 75 }
76 $number = count($text); 76 $number = count($text);
77 - $randomNumber = rand(0, $number - 1);  
78 if($updateObject['type'] == 0){//更新所有关键字 77 if($updateObject['type'] == 0){//更新所有关键字
79 - $keywordModel->edit(['keyword_content'=>$text[$randomNumber]],['status'=>1]); 78 + //获取所有关键字的id
  79 + $idArr = $keywordModel->selectField(['id'=>['>',0]],'id');
  80 + if($info['update_method'] != 1){
  81 + shuffle($idArr);
  82 + }
  83 + $result = $this->splitArrayIntoParts($idArr,$number);
  84 + foreach ($result as $key => $val){
  85 + $keywordModel->edit(['keyword_content'=>$text[$key]],['id'=>['in',$val]]);
  86 + }
80 }else{ 87 }else{
81 //按传递的关键字更新 88 //按传递的关键字更新
82 if(!empty($updateObject['keyword'])){ 89 if(!empty($updateObject['keyword'])){
83 $updateObject['keyword'] = (array)$updateObject['keyword']; 90 $updateObject['keyword'] = (array)$updateObject['keyword'];
84 - $keywordModel->edit(['keyword_content'=>$text[$randomNumber]],['title'=>['in',$updateObject['keyword']]]); 91 + foreach ($updateObject['keyword'] as $key => $item){
  92 + if($info['update_method'] != 1){
  93 + $randomNumber = rand(0, $number - 1);
  94 + }else{
  95 + $randomNumber = $text[$key] ?? rand(0, $number - 1);
  96 + }
  97 + $keywordModel->edit(['keyword_content'=>$text[$randomNumber]],['title'=>$item]);
  98 + }
85 } 99 }
86 //按给定的数量更新 100 //按给定的数量更新
87 if(!empty($updateObject['number']) && ($updateObject['number'] != 0)){ 101 if(!empty($updateObject['number']) && ($updateObject['number'] != 0)){
88 $keywordIdArr = $keywordModel->where("status",1)->inRandomOrder()->take($updateObject['number'])->pluck('id')->toArray(); 102 $keywordIdArr = $keywordModel->where("status",1)->inRandomOrder()->take($updateObject['number'])->pluck('id')->toArray();
89 - $keywordModel->edit(['keyword_content'=>$text[$randomNumber]],['id'=>['in',$keywordIdArr]]); 103 + foreach ($keywordIdArr as $key => $item){
  104 + if($info['update_method'] != 1){
  105 + $randomNumber = rand(0, $number - 1);
  106 + }else{
  107 + $randomNumber = $text[$key] ?? rand(0, $number - 1);
  108 + }
  109 + $keywordModel->edit(['keyword_content'=>$text[$randomNumber]],['title'=>$item]);
  110 + }
90 } 111 }
91 } 112 }
92 return true; 113 return true;
@@ -108,4 +129,21 @@ class UpdateKeyword extends Command @@ -108,4 +129,21 @@ class UpdateKeyword extends Command
108 return true; 129 return true;
109 } 130 }
110 131
  132 +
  133 + public function splitArrayIntoParts(array $data, int $parts): array
  134 + {
  135 + $count = count($data);
  136 + // 每份的最小长度(向下取整)
  137 + $minSize = intdiv($count, $parts);
  138 + // 余数(说明有一些数组项要平均分配给前面的几份)
  139 + $remainder = $count % $parts;
  140 + $result = [];
  141 + $start = 0;
  142 + for ($i = 0; $i < $parts; $i++) {
  143 + $size = $minSize + ($i < $remainder ? 1 : 0);
  144 + $result[] = array_slice($data, $start, $size);
  145 + $start += $size;
  146 + }
  147 + return $result;
  148 + }
111 } 149 }