在单个数组中交换最高和最低值 - PHP

时间:2013-01-03 16:44:27

标签: php arrays indexing swap

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

目标: 1.找到数组中的最高值和最低值($ lemons)。 2.切换所述值的位置。 (IE:6,2,7,8,9,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));
 ?>

3 个答案:

答案 0 :(得分:2)

尝试一下..我不是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);
?>

答案 1 :(得分:1)

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

$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);

答案 2 :(得分:0)

对于类似这样的事情,最好不要使用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);

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