2011-12-12 77 views
1

我使用以下方法从3个值中发现最大整数。从一组3中找出2个最小整数

<?php 
$a = 100; 
$b = 200; 
$c = -300; 
$max = max($a,$b,$c); 
foreach(array('a','b','c') as $v) { 
    if ($$v == $max) { 
     echo "\$$v is $max and therefore the largest"; 
     break; 
    } 
} 
?> 

这与输出完美的作品:$ b为200,因此最大的

不过,我现在想也输出从3

所以2个最小的整数以及显示最大的1个,也会输出其他2个。

有人可以告诉我怎么做到这一点吗?

非常感谢任何指针。

回答

1

要说明马特回答:

$list = array(2, 3, 1); 
sort($list); 

echo "Largest element : ".$list[count($list)-1]."\n"; 
echo "Two smallest elements :"; 

for($i=0; $i<2; $i++) { 
    echo $list[$i]." "; 
} 
+0

谢谢,Hezad :) – michaelmcgurk

2
  1. 把三个整数列表中的
  2. sort列表
  3. 取前两个元素 - >这是两个最小的
  4. 最后一个元素是最大的
+0

感谢这个,马特。欣赏答复。我已经得到这个'$ nums = array(100,200,-300); sort($ nums);'我现在怎么拿第2个元素? – michaelmcgurk

+1

@mcgarriers - 我只会做'$ first = $ nums [0]; $ second = $ nums [1];'用于快速n-dirty解决方案。我假设有一个函数为你获得一个子列表,但我不是一个PHP专家,所以我不知道它会是什么。编辑:'array_slice'这样做。 –

+0

谢谢。使用:$ nums = array(100,200,-300); sort($ nums); foreach($ nums as $ key => $ val){ echo“nums [”。 $键。 “] =”。 $ val。 “\ n
”; }' – michaelmcgurk

1
$nums = array(100,200,-300); 
sort($nums); 
$twoSmallest = array_slice($sorted,0,2); 
$largest = array_slice($sorted,-1,1); 
1

我同意其他的“排序!”人群。在此处,所涉及的变量的名称保持一个完整的例子,所以结果是像在您的示例:

function var_cmp($_a, $_b) { 
    global $$_a, $$_b; 
    return $$_b - $$_a; 
} 

$a = 100; 
$b = 200; 
$c = -300; 
$result = array('a', 'b', 'c'); 
usort($result, 'var_cmp'); 
printf('$%s is %d and largest, followed by $%s = %d and $%s = %d', 
     $result[0], ${$result[0]}, 
     $result[1], ${$result[1]}, 
     $result[2], ${$result[2]});