【问题标题】:Combine Words and Numbers in Arrays using PHP使用 PHP 在数组中组合单词和数字
【发布时间】:2019-09-03 09:48:07
【问题描述】:

我想在我的结果中合并这两个数组
我的密码

   <?php 

   /* Designated level for each exp
   Level 2 - 23 exp
   Level 3 - 34 exp
   Level 4 - 45 exp
   Level 5 - 56 exp
   Level 6 - 68 exp
   Level 7 - 79 exp
   Level 8 - 90 exp
   Level 9 - 101 exp
   Level 10 - 112 exp
   Level 11 - 123 exp
   Level 12 - 134 exp
   Level 13 - 145 exp
   Level 14 - 156 exp
   Level 15 - 168 exp
   Level 16 - 179 exp
   */

   $limit =  100000-99318;  

    // Level
   $arrlevel = array ('Level 2','Level 3','Level 4','Level 5','Level 6','Level 7','Level 8','Level 9','Level 10','Level 11','Level 12','Level 13','Level 14','Level 15','Level 16');

   // Exp
   $array = array (23,34,45,56,68,79,90,101,112,123,134,145,156,168,179);

   $array = array_filter($array, function($var) use ($limit) {
   return ($var <= $limit);
   });

  $num = count($array); 
  $total = pow(2, $num);
   $out = array();

   for ($i = 0; $i < $total; $i++) { 

   $comb = array();
     for ($j = 0; $j < $num; $j++) { 
       // is bit $j set in $i? 
    if (pow(2, $j) & $i){
      $comb[] = $array[$j];
           }      
      } 

       if (array_sum($comb) == $limit)
      {
        $out[] = $comb;
       }
      }

      array_multisort(array_map('count', $out), SORT_ASC, $out);

       $out = array_unique($out, SORT_REGULAR);
     $m = 1;
    foreach($out as $result) 

     echo "<b>Possible Answer ". $m++. " : </b> " .implode(', ', $result)." 
  <br><br>";    
        ?>

输出:

可能的答案 1:
23、34、45、68、79、90、112、179

可能的答案 2:
23、34、45、68、79、90、123、168

可能的答案 3:
23、34、45、68、79、101、112、168


我想要这样的输出

可能的答案 1:
2 - 23 级 | 3 - 34 级 | 4 - 45 级 | 6 - 68 级 | 7 - 79 级 | 8 - 90 级 | 10 - 112 级 |等级 16 - 179

------------------------------------------
我想合并两个数组
(这个程序是关于寻找所有组合以达到结果[子集和程序])

【问题讨论】:

  • 我不确定我是否正确理解了您的问题。我猜你一次问了很多事情?如果您已经拥有这两个数组,并且只想将它们组合起来,那么:php.net/manual/en/function.array-combine.php 呢?

标签: php arrays


【解决方案1】:

您可以为Level n 的条目和体验使用映射器。

然后对于循环中的$result 数组,您可以使用array_map,并且对于您要映射的每个项目,使用该值作为$mapper 数组的键并使用| 内爆

这将以这种格式格式化所有可能的答案:

Possible Answer 1 :
Level 3 - 34 | Level 13 - 145 | Level 14 - 156 | Level 15 - 168 | Level 16 - 179 

例如

$mapper = [
    23 => "Level 2",
    34 => "Level 3",
    45 => "Level 4",
    56 => "Level 5",
    68 => "Level 6",
    79 => "Level 7",
    90 => "Level 8",
    101 => "Level 9",
    112 => "Level 10",
    123 => "Level 11",
    134 => "Level 12",
    145 => "Level 13",
    156 => "Level 14",
    168 => "Level 15",
    179 => "Level 16",
];

foreach($out as $result)
    echo "<b>Possible Answer ". $m++. " : </b> " .implode(' | ', array_map(function($x) use ($mapper) {
            return $mapper[$x] . " - " . $x;
        }, $result))." 
  <br><br>";

Php demo

【讨论】:

【解决方案2】:

做它并进行排序

$combine=array_combine($arrlevel,$array);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多