PHP的的陣列和比較符

alansleep發表於2013-01-31

初學php,看著php前期的語法和c何其類似,不由輕車前進,勿入陷阱.比如陣列和比較符。

php的陣列在c看來完全就是一個高階的hash表.而且同一個hash表的key可以是int,string和並存。

陣列的格式為:

$arr = array(k1=>v1,k2=>v2,...kn=>v2);
$arr = array(f,l,step);//得到f,l區間增序或減序的陣列,step為遞增或遞減的步長.

下面是一些陣列定義的形式。

$arr = array("abc",'def','123'); // 沒有指定key時,key自動為0,後面的同樣沒有指定key的元素的key以前面的最大的大於0的整數key+1.
print_r($arr); // [0] => abc [1] => def [2] => 123



$arr = range(0,10);//步長1
$arr = range(10,1,2); //步長2,遞減,不包括 1
$arr = range('a','d');  //字元
$arr = range('as','de'); //如果fl都不是數字,和數字字串,則取第1個字元作為f,l
$arr = range('a',5);//如果f,l其中一個是數字或者數字字串,另外一個不是,則不是的視為0.

上面的輸出

Array ( [0] => 0 1 => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 [10] => 10 ) Array ( [0] => 10 1 => 8 [2] => 6 [3] => 4 [4] => 2 ) Array ( [0] => a 1 => b [2] => c [3] => d ) Array ( [0] => a 1 => b [2] => c [3] => d ) Array ( [0] => 0 1 => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 )

上面的key都是整數且挨個遞增或遞減的。下面的就體現hash表的特點了

$arr = array(-2=>1,$arr[0],2);//沒指定key的預設只會從大於等於0的最大數遞增
$arr = array('a'=>'a','b','c','b'=>'d','e',10000=>'f','g',10=>'h','i',0=>11);

上面的輸出

Array ( [-2] => 1 [0] => 0 1 => 2 ) Array ( [a] => a [0] => 11 1 => c [b] => d [2] => e [10000] => f [10001] => g [10] => h [10002] => i )

多維陣列和上面一樣,就是元素的值也是array,如

$arr = array(0,range(0,3),'a');
print_r($arr);print '< br/>';
print_r($arr[1]);print '< br/>';

上面的輸出:

Array ( [0] => 0 1 => Array ( [0] => 0 1 => 1 [2] => 2 [3] => 3 ) [2] => a ) Array ( [0] => 0 1 => 1 [2] => 2 [3] => 3 )

php的比較符因為其弱語言,變數無型別的特點導致比較操作時頗為複雜曲折。有下面幾個規則:

1.整數和字串比較:字串會被轉化為數字,如果轉化不了則為0.(比如‘ads’ == 0) 2.false:NULL,整數0,浮點0.0,字串'0',空的字串陣列物件,未生命的變數,都為false;其他為true. 3.陣列之間的比較:成員數小的小返回-1;成員數大的大,返回1;如果其中一陣列的key在另外的陣列內不存在則無法比較,無法比較返回null;完全相等返回0; 4.陣列和其他型別比較:陣列總是更大 5.物件和其他型別比較:物件總是更大

只有理解上面的轉化,才不會出現因為0 == '0',0 == NULL,等價於 '0' == NULL這樣的錯誤。

下面是正確的判斷。

0 == '0'  
0 == '-0'  
1 == '+1'
NULL == 0
NULL != '0'
'0xa'==0xa == 10
'fdada'==0
NULL == false
false == 0

我的部落格

相關文章