【问题标题】:Swapping highest and lowest values in a single array - PHP [closed]在单个数组中交换最高和最低值 - PHP [关闭]
【发布时间】:2013-01-03 16:44:27
【问题描述】:

我是 PHP 新手。一位朋友正在帮助我了解这一点,但他有一段时间没有空。我知道有些事情可能根本没有意义(我正在学习,我知道这不完全是初学者功能)。

目标: 1. 查找数组 ($lemons) 中的最大值和最小值。 2. 切换所述值的位置。 (即:6、2、7、8、0、9 --> 6、2、7、8、9、0)。

谢谢!

 <?php
 function switcheroo($lemons) {
    $min_lemons = min($lemons);
    $max_lemons = max($lemons);
    foreach ($lemons as $key => $value) {
        if ($max_lemons > 0) {
            $max_decoy = $min_lemons;
        }
        if ($min_lemons < 0) {
            $min_decoy = $max_lemons;
        }
    }
    return $lemons;
 }
 $lemons = array(6, 2, 7, 8, 0, 9);
 print_r(switcheroo($lemons));
 ?>

【问题讨论】:

  • 很高兴帮助别人做作业。如果你真的想学什么,最好的办法就是自己去想办法,因为这是一个很基础的问题,你自己也差不多有解决办法。
  • 看一下 sort 函数,按顺序得到它,然后交换第一个和最后一个值的值
  • @John,谢谢!我一直在努力...我知道我需要将值放入数组中,而不是直接替换它们。但是,我只是不断重复/撤消相同的事情,例如:'$min_lemons = min($lemons); $max_lemons = max($柠檬); $min_lemons = $max_lemons; $max_lemons = $min_lemons; = 出色的逻辑:/' chrisbulmer,我想这样做,但这样做是一个挑战。他知道这会很困难,并且不会让我一开始就这样做,但我坚持。哎呀!

标签: php arrays indexing swap


【解决方案1】:

试试这个。我在 PHP 方面不是最棒的,但我发现这很有趣!

<?php
$array = array(3,6,12,7,3,6);
print_r($array);

$max = max($array);
$min = min($array);
$maxKey = array_search($max, $array);
$minKey = array_search($min, $array);

$array[$maxKey] = $min;
$array[$minKey] = $max;

echo '<br />';
print_r($array);
?>

【讨论】:

    【解决方案2】:

    这可能不是最优雅的解决方案,但它可以按预期工作:

    $arr = array(6, 2, 7, 8, 0, 9);
    
    echo 'Array before: <br /><pre>', print_r($arr, true);
    
    function switcheroo($array) {
        $new_array = $array;
    
        $min_lemons = min($new_array);
        $max_lemons = max($new_array);
    
        $min_lemons_key = array_search($min_lemons, $new_array);
        $max_lemons_key = array_search($max_lemons, $new_array);
    
        $new_array[$min_lemons_key] = $max_lemons;
        $new_array[$max_lemons_key] = $min_lemons;
    
        return $new_array;
    }
    
    echo 'Array after: <br />', print_r(switcheroo($arr), true);
    

    【讨论】:

      【解决方案3】:

      对于这样的事情,最好不要使用foreach 语法,因为您没有使用关联数组,这会使处理数组变得更加困难,而且它并没有真正教给您太多东西。一个简单的for 循环最适合这种情况,同时也是跨语言的主要内容。

      // prepare the lemons.
      $lemons = array(6, 2, 7, 8, 0, 9);
      print_r($lemons);
      
      // initialize these values to assume that the first element is
      // both the max and min as the initial basis for comparison.
      $cur_max = $lemons[0];
      $cur_max_index = 0;
      $cur_min = $lemons[0];
      $cur_min_index = 0;
      
      // iterate through the array
      for( $i=0; $i<count($lemons); $i++ ) {
          if( $lemons[$i] > $cur_max ) {
              $cur_max = $lemons[$i];
              $cur_max_index = $i;
          } else if( $lemons[$i] < $cur_min ) {
              $cur_min = $lemons[$i];
              $cur_min_index = $i;
          }
      }
      
      // do the swap. I am ignoring the fact that we already have the
      // max/min values to illustrate a 'proper' swap.
      $temp_val = $lemons[$cur_min_index];
      $lemons[$cur_min_index] = $lemons[$cur_max_index];
      $lemons[$cur_max_index] = $temp_val;
      
      print_r($lemons);
      

      在学习编程基础知识时,应尽量避免使用“帮助”函数,如 min()max()。从表面上看,练习的目的是让您熟悉开始编写基本排序算法所需的数组和逻辑操作。

      【讨论】:

      • 哇,看看这个(这很有意义)告诉我在处理这些例子之前我需要阅读/学习更多。我知道我自己无法做到这一点。谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多