【问题标题】:How to get common minimum value in two arrays如何在两个数组中获得共同的最小值
【发布时间】:2015-06-20 13:09:39
【问题描述】:

我有一个函数,它检查两个数组并返回两个数组中的共同最小值。当两个数组具有相同数量的元素时,IT 将返回正确答案。但是另一个更大,它不会返回正确的那个。如何克服?

<?php
    $A = array(0);
    $B= array(1,0);
    $n = sizeof($A);
    $m = sizeof($B);
    sort($A);
    sort($B);
    $i = 0;
    for ($k = 0; $k < $n; $k++) {
        if ($i < $m - 1 AND $B[$i] < $A[$k])
            $i += 1;
        if ($A[$k] == $B[$i])
            echo $A[$k];
    }
    echo "end";

?>

谢谢

【问题讨论】:

  • 这看起来很 C 风格,这会导致你在 PHP 中出现问题。我们有foreach 循环可以提高它的可读性。我们也有 count 而不是 sizeof 用于数组。
  • 使用 PHP 函数 array_intersectmin
  • $minimumCommonValue = min(array_intersect($A, $B));这样简单的东西有什么问题...除了如果没有共同值的错误处理
  • 我可能会建议养成使用&amp;&amp; 而不是AND 的习惯;这不是一个纯粹的风格选择:stackoverflow.com/questions/2803321/and-vs-as-operator

标签: php minimum


【解决方案1】:

一种更简单的方法是取数组交集的最小值:

$array = array (5,6,7,8,9);
$array2 = array (9,7,5,3,4,1);

$min = min(array_intersect($array, $array2));
echo $min; // 5

【讨论】:

    【解决方案2】:

    利用 PHP 函数 array_intersect() 提取两个数组中的公共值,然后使用 min() 获取最小值

    像这样:

    <?php
    
    $arrayOne = [1, 3, 5, 6, 7];
    $arrayTwo = [0, 9, 2, 3, 4, 5];
    
    echo min(array_intersect($arrayOne, $arrayTwo)); // 3
    

    【讨论】:

      【解决方案3】:

      我会使用 array_intersect。它会给你一个数组,其中只有你正在查看的两个数组中都存在的值,然后你可以找到数组中的最小值

      $A = array(0,5,4,3,2,1,4);
      $B = array(0,1,3,4);
      $C = array_intersect($A, $B);
      $low = $C[0];
      
      for($i = 0; $i < count($C); $i++) {
         if($C[$i] < $low) 
            $low = $C[$i];
      }
      
      echo "Lowest shared number is $low";
      

      【讨论】:

      • 或者按照其他人的建议使用 min()
      猜你喜欢
      • 2015-10-27
      • 2013-06-11
      • 2020-01-27
      • 2017-06-27
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多