日期:2014-05-17  浏览次数:20504 次

PHP数组奇怪的问题
如下:
PHP code

$arr1里面是从数据库里取出来的数据,print_r出来如下:
Array
(
    [0] => 30544
    [1] => 30544
    [2] => 30532
    [3] => 30550
    [4] => 30544
    [5] => 30544
    [6] => 30532
    [7] => 30532
    [8] => 30532
    [9] => 30550
    [10] => 30544
    [11] => 30544
    [12] => 30544
    [13] => 30544
    [14] => 30544
    [15] => 30544
    [16] => 30532
    [17] => 30532
    [18] => 30532
    [19] => 30532
)

$arr2 = array('1','2','4','5');

//我用同一个函数 max()取最大值,结果如下:

//arr1的结果,会报错,但是可以取到数据
30550
A PHP Error was encountered

Severity: Warning

Message: max() [function.max]: When only one parameter is given, it must be an array

Filename: test.php

Line Number: 104


//arr2正常,输出
5




以上,报错是为什么啊,怎么解决啊。谢谢。


------解决方案--------------------
max() [function.max]: When only one parameter is given, it must be an array

max一个参数的时候,必须是个数组。
PHP code

logminMath 函数
PHP Manual

--------------------------------------------

max
(PHP 4, PHP 5)

max — 找出最大值

说明
mixed max ( number $arg1 , number $arg2 )
mixed max ( array $numbers [, array $... ] )
max() 返回参数中数值最大的值。 

如果仅有一个参数且为数组,max() 返回该数组中最大的值。如果第一个参数是整数、字符串或浮点数,则至少需要两个参数而 max() 会返回这些值中最大的一个。可以比较无限多个值。 

Note: 

PHP 会将非数值的 string 当成 0,但如果这个正是最大的数值则仍然会返回一个字符串。如果多个参数都求值为 0 且是最大值,max() 会返回其中数值的 0,如果参数中没有数值的 0,则返回按字母表顺序最大的字符串。 



Example #1 使用 max() 的例子

<?php
echo max(1, 3, 5, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5
echo max(0, 'hello');     // 0
echo max('hello', 0);     // hello
echo max(-1, 'hello');    // hello

// 对多个数组,max 从左向右比较。
// 因此在本例中:2 == 2,但 4 < 5
$val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)

// 如果同时给出数组和非数组作为参数,则总是将数组视为
// 最大值返回
$val = max('string', array(2, 5, 7), 42);   // array(2, 5, 7)
?> 

参见 min() 和 count()。 

User Contributed Notes
sun at drupal dot org 03-Aug-2011 11:25 
Note that max() throws a warning if the array is empty:

<?php
$a = array();
max($a);
// Warning: max(): Array must contain at least one element
?>

So make sure your data isn't empty. 
php at rijkvanwel dot nl 12-Apr-2011 02:08 
To get the largest key in an array:

<?php
$array = array( 0 => 'first', 1=> 'second', /* ... */ 99 => 'nth' );
$max_key = max( array_keys( $array ) ); // 99
?> 
Alex Stanhope 28-Oct-2010 03:00 
If you want to test whether x lies within two bounds: 

<?php 
    static function isInRange($x, $y1, $y2) { 
        return( ($x >= min($y1, $y2)) && ($x <= max($y1, $y2)) ); 
    } 

//called by: 

   class::isInRange(10,12,2); 
//or 
   $this->isInRange(10,12,2); 
//or (drop static) 
   isInRange(10,12,2); 

//simple test function: 

    static function unit_isInRange() { 
        $output = array(); 
        $inputlist[] = array(10, 12, 2, true); 
        $inputlist[] = array(13, 12, 2, false); 
        $inputlist[] = array(2, -2, 2, true); 
        $inputlist[] = array(2, -8, -2, false); 
        foreach($inputlist as $input) { 
            $output[] = array( 
                'input' => array($input[0], $input[1], $input[2]), 
                'output' => self::isInRange($input[0],$input[1],$input[2]), 
                'expected' => $input[3], 
            ); 
        } 
        return($output); 
    } 
?> 
dan at coders dot co dot nz 22-May-2010 11:29 
max() on undefined parameters does not assume the value is zero, it ignores it. 
<?php 
$dimensions = array('left' => -2); 
// If $dimensions['right'] was never set, 
// we may expect it to be treated as zero, but 
print max($dimensions['left'], $dimensions['right']); 
// 
// Returns -2, not zero 

print max(0+$dimensions['left'], 0+$dimensions['right']); 
?> 
would be a work-around, but it's probably tidier to ensure your values are set c