ホームページ  >  記事  >  バックエンド開発  >  PHP 配列に関連する奇妙な問題

PHP 配列に関連する奇妙な問題

WBOY
WBOYオリジナル
2016-06-13 13:33:441550ブラウズ

PHP 配列
に関する奇妙な問題は次のとおりです:

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
$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() [ 関数.max]: パラメータが 1 つだけ指定される場合、それは配列である必要があります

max パラメータが 1 つ指定される場合、それは配列である必要があります。
PHP コード

logminMath関数
PHPマニュアル

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

最大
(PHP4、PHP5)

max – 最大値を見つける

説明する
混合最大 (数値 $arg1 、数値 $arg2 )
混合最大 (配列 $numbers [, 配列 $... ] )
max() は引数の最大値を返します。 

引数が 1 つだけで、それが配列の場合、max() は配列内の最大値を返します。最初の引数が整数、文字列、または浮動小数点数の場合は、少なくとも 2 つの引数が必要で、max() はこれらの値のうち最大の値を返します。無限の数の値を比較できます。 

注記:

PHP は数値以外の文字列を 0 として扱いますが、これが最大の数値である場合は文字列を返します。複数の引数が 0 と評価され、それが最大値である場合、max() はその中の数値 0 を返します。引数に数値 0 がない場合は、アルファベット順で最大の文字列を返します。 



例1 max() の使用例

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

// 複数の配列の場合、max は左から右に比較されます。
// したがって、この例では 2 == 2 ですが、4 < 5 になります。
$val = max(配列(2, 4, 8), 配列(2, 5, 7)) // 配列(2, 5, 7);

// 配列と非配列の両方が引数として指定された場合、配列は常に次のように扱われます。
// 最大値を返す
$val = max('string', array(2, 5, 7), 42); // 配列(2, 5, 7);
?>

min() と count() を参照してください。ユーザーが投稿したメモ
Drupal dot org の太陽 03-Aug-2011 11:25 
配列が空の場合、max() は警告をスローすることに注意してください。

<?php
$a = 配列();
最大($a);
// 警告: max(): 配列には少なくとも 1 つの要素が含まれている必要があります
?>

したがって、データが空でないことを確認してください。 
rijkvanwel dot nl の php 12-Apr-2011 02:08 
配列内の最大のキーを取得するには、次のようにします。

<?php
$array = array( 0 => '最初', 1=> '2 番目', /* ... */ 99 => 'n 番目' );
$max_key = max( array_keys( $array ) ); // 99
?> 
アレックス・スタンホープ 2010年10月28日 03:00 
x が 2 つの範囲内にあるかどうかをテストしたい場合は、次のようにします。 

<?php 
    静的関数 isInRange($x, $y1, $y2) { 
        return( ($x >= min($y1, $y2)) && ($x <= max($y1, $y2)) ); 
    } 

// によって呼び出されます: 

   クラス::isInRange(10,12,2); 
//または 
   $this->isInRange(10,12,2); 
// または (静的ドロップ) 
   isInRange(10,12,2); 

// 簡単なテスト関数: 

    静的関数unit_isInRange() { 
        $output = 配列(); 
        $inputlist[] = 配列(10, 12, 2, true); 
        $inputlist[] = 配列(13, 12, 2, false); 
        $inputlist[] = 配列(2, -2, 2, true); 
        $inputlist[] = 配列(2, -8, -2, false); 
        foreach($inputlist as $input) { 
            $output[] = 配列( 
                '入力' =>配列($input[0], $input[1], $input[2]), 
                '出力' => self::isInRange($input[0],$input[1],$input[2]), 
                '期待' => $input[3]、 
            ); 
        } 
        戻り値($output); 
    } 
?> 
ダン、コーダーズ ドット コ ドット nz 22-May-2010 11:29 
未定義のパラメータに対する max() は、値がゼロであることを想定せず、無視します。 
<?php 
$dimensions = array('left' => -2); 
// $dimensions['right'] が設定されなかった場合、 
// ゼロとして扱われることが予想されるかもしれませんが、 
print max($dimensions['left'], $dimensions['right']); 
// 
// ゼロではなく -2 を返します 

print max(0+$dimensions['left'], 0+$dimensions['right']); 
?> 
これは回避策ですが、最初に値が正しく設定されていることを確認する方がおそらく整然としています。 

(とにかく PHP 5.2.11 上で) 
アレックス・ラス 2010年4月10日 11:27 
文字列の前に数値がある場合は常に、それが比較に使用されることに注意してください。

<?php

  max('7iuwmssuxue', 1); // 7iuwmssuxu を返します
  max('-7スイダ', -4); // -4 を返します

?>

ただし、それが文字列の前にある場合に限り、

<?php

  max('sdihatewin7wduiw', 3); // 3 を返します

?> 
グリルン、abendstille ドット、2010 年 4 月 2 日 03:55 
max は空ではない配列のみを受け入れます。 

数値配列や max を頻繁に扱う場合は、この関数が役立つかもしれません。 

<?php 
if (!function_exists('emax')) { 
    関数 emax($arr) { 
        if (!is_array($arr)) return call_user_func_array('max', func_get_args()); 
        if (count($arr) == 0) 0 を返します。 
        max($arr)を返します; 
    } 
} 
?> 
artem dot yagutyan gmail dot com 27-Mar-2010 03:28 
これは良い例です: 最大値から最小値まで

<?php

関数 max_key($array) {
foreach ($array as $key => $val) {
    if ($val == max($array)) $key を返します。
    }
}

$array = 配列(10, 2, 5, 7, 4,15,32,8,41,25);
$array_count=カウント($array);    
for($i=1;$i 
マルシーニ 2009 年 5 月 11 日 07:34 
max() は日付を比較できることに注意してください。そのため、次のように記述します。

<?php
$dates = array('2009-02-15', '2009-03-15');
エコー最大($dates);
?>

2009-03-15 を取得します。 
ヴァントウィスクドットnlのリース 09-Nov-2008 06:36 
max を使用すると、if/then/else 構造を使用するよりもはるかに遅くなることが何度かありました。ぜひ普段の生活の中でチェックしてみてください!

リース 
マーカス・ザッコ 2008年9月29日 09:47 
このコードは 7 つの配列をループし、それらの配列内の最高の平均値を見つけて、そのフォントの色を変更します。ハイライトに最適です。 

最大のポイントはこの列です 
if($average[$i] == max($average)) 

number_format は数値を小数点以下 0 に丸めるだけです。 

<?php 
for ( $i = 0; $i <= 6; $i++) { 
  $num = $i+1; 
  if($average[$i] == max($average)) { 
    echo "値 ".$num.": <font color='red'>".number_format($average[$i], 0, '.', '')." % </font<br> "; 
  } それ以外 { 
    echo "値 ".$num.": ".number_format($average[$i],0,'.','')." %<br>"; 
  } 
} 
?> 

### 出力 

値 1: 52 % 
値 2: 58 % 
値 3: 56 % 
値 4: 73 % 
値 5: 77 %  

これは次と同じです: 

<?php 
$tmp = $x; 
if($tmp  $max) 
{ 
     $tmp = $max; 
} 
$y = $tmp; 
?> 

たとえば、1 から 12 までの整数を制限したい場合は、次のようになります。 

入力: 
<?php 
$x = 0; 
エコーバウンド(0, 1, 12).'<br />'; 
$x = 1; 
echobound($x, 1, 12).'<br />'; 
$x = 6; 
echobound($x, 1, 12).'<br />'; 
$x = 12; 
echobound($x, 1, 12).'<br />'; 
$x = 13; 
echobound($x, 1, 12).'<br />'; 
?> 

出力: 
1 
1 
6 
12 
12 
michaelangel0 mail.com 04-Jul-2007 03:00 
Matlab ユーザーなどは、min 関数と max 関数から出力される二重引数がないと寂しいと感じるかもしれません。 

配列内の最大値の INDEX と値自体を取得するには、次の関数または派生関数を使用します。 

<?php 
関数 doublemax($mylist){ 
  $maxvalue=max($mylist); 
  while(list($key,$value)=each($mylist)){ 
    if($value==$maxvalue)$maxindex=$key; 
  } 
  return array("m"=>$maxvalue,"i"=>$maxindex); 
} 
?> 
jeremi23 gmail ドットコム 14-Jun-2007 03:09 
キー/値を含む配列の最大値 

<?php 
$tmp = 配列(1 => 5, 2=> 3); 
エコー最大($tmp); 
?> 

これは 5 を返すため、値の最大値が計算されます。 
johnmott59 at hotmail dot com 17-May-2007 12:35 
1 次元配列のセットから最大値を見つけるには、次のようにします。 

<?php 
$d1 = 配列(450,420,440,430,421); 
$d2 = 配列(460,410,410,430,413,375,256,411,656); 
$d3 = 配列(430,440,470,435,434,255,198); 

$t = max(max($d1),max($d2),max($d3)); 
// $t は 656 
?> 

内側の max() 関数は配列を操作し、外側の max 関数は内側の関数の数値結果を比較します。 
ジョンフェイズ、gmail ドットコム 02-May-2006 09:27 
min() と max() のブール値パラメータについて:

(a) いずれかのパラメータがブール値の場合、max と min は残りのパラメータをブール値にキャストして比較を行います。
(b) true >間違い
(c) ただし、max と min は、(キャストではなく) 比較に勝った実際のパラメータ値を返します。

以下にいくつかのテスト ケースを示します。

1. max(true,100)=true
2. max(true,0)=true
3. max(100,true)=100
4. max(false,100)=100
5. max(100,false)=100
6. min(true,100)=true
7. min(true,0)=0
8. min(100,true)=100
9. min(false,100)=false
10. min(100,false)=false
11. min(true,false)=false
12. max(true,false)=true 

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

logminMath関数数
PHPマニュアル
 <div class="clear"></div>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。