basic
- ==及===的不同
var_dump (1 == 1);//true
var_dump (1 == "1");//true
var_dump (1 === 1); //true
var_dump (1 === "1"); //false, 值要相同,同型態 (比陣列,還要Order相同)
- ==及===的不同
function
- Returning Values
function可以call by reference
但回傳值就必需有變數
//example 1 function &query($sql) { $result = mysql_query($sql); return $result; //return variable } //example 2, incorrect and will cause PHP to emit a notice when called function &getHollo() { return "Hello World"; //非variable } //example 3 also cause the warning to be issued when called function &test() { echo 'This is a test'; }
- Passing Arguments
function hello($who = "World") { echo "Hello $who"; } hello(); //pass in no argument and $who is assigned "World" by default
- Returning Values
Arrays
- Array Basic
$x[] = 10; $x['aa'] = 11; echo $x[0]; //Outputs 10 //continue, what if $x[0]=12; // echo $x[0]; //Outputs 12, 蓋掉了
另外新增元素會從Array中最大的數值增加
$a = array(2 => 5); $a[] = 'a'; //This will have a key of 3 $b = array( '4' => 5,'a' => 'b'); $a[] = 44; //This will have a key of 5<$/code>
key中,'A'跟'a'不同,但'1'跟1相同
- Array Operations
為什麼5,6不見了?$a = array(1,2,3); $b=array("a" => 4,5,6); var_dump($a + $b); //result in array(4){ [0] => int(1) [1] => int(2) [2] => int(3) [a] => int(4) //沒有5,6 }
因為$b = ('a'=> 4,1 => 5, 2 => 6);
而$a + $b時,被前面的$a搶走了...
var_dump及print_r的差別
Comparing Arrays
=>一樣,但前者會印
型態
$arrayA == $arrayB //當陣列數一樣,值一樣
$arrayA === $arrayB //當陣列數一樣,值一樣,Order也一樣 - Array Iteration
Array pointer問題
2個foreach都沒做事,為何會變改$a = array('zero','one','two'); foreach($a as &$v){ } foreach($a as $v){ } print_r($a); //outputs Array { [0] = zero [1] = one [2] = one //two被改one了 }
因為第一個foreach的$v是call by reference
在迴圈結束時,$v停在$a[2](two)
在第二個foreach時
第1次被指向array index 0, 被assign "zero"...
第2次被指向array index 1, 被assign "one"...
第3次被指向array index 2, 被assign "one"(原本的值"two",在上一輪改為"one"了)
所以囉 這不是php的bug - Sorting Arrays
>>>>>
Name 說明 Key sort($array); 排序value,可加第二參數
SORT_REGULAR, SORT_NUMERIC, SORT_STRINGdestory asort($array); 排序value,key被保留 保留 rsort($array); sort()是ascending order,rsort()即為decending order destory arsort($array); 即為decending order natsort($array); sort(),排序10t,2t,3t(因此10t的1先出現),此時利用natsort即可解決 destory natcasesort($array); 考慮大小寫不同 destory ksort($array); 依key排序 low to high (krsort相反) 保留
usort($array,'myCmp'); user defined destory uasort($array,'myCmp'); 保留key 保留 uksort($array,'myCmp'); 依key排序 保留
- The Anti-Sort
Name 說明 shuffle($card); 將array往後移一位(最後一個變第一個) array_rand($card,[, int num_req]); 隨機挑n個key
- Set Functionality
Name 說明 array_diff($a,$b) $a的差集($a有什麼$b沒有的) array_intersect($a,$b) $a,$b的交集
- Array Basic
星期五, 10月 08, 2010
Zend PHP 5 Certification Study Guide 筆記 (一)
訂閱:
張貼留言 (Atom)
6 則留言:
Array Iteration 的 Array pointer問題沒看懂@@
可以再解釋一下呢@@
感謝
嗯嗯 有筆誤
$a = array('zero','one','two')
第一個迴圈是
foreach($a as &$v){
}
第二個迴圈是 (原本$v寫成&$v)
foreach($a as $v){
}
不過結果應該是一樣的吧
因為第一個迴圈利用& (call by reference)
也就是$v值被改變時,array裡的該item就會被更動
因此當第一個迴圈結束時
$v是指向$a[2](two)
是的,一樣沒有改變,依然是two
但當第二個迴圈開始時
loop 1: $v($a[2]) = $a[0] = 'zero'
loop 2: $v($a[2]) = $a[1] = 'one'
loop 3: $v($a[2]) = $a[2] = 'one'
$a[2]先在loop 1,被改成zero後
又在loop 2,被改成one
最後loop 3,因為$a[2]已被改為one,所以一樣是one
要解決這題,建議要先做unset
上面那段請無視ORZ
我到底在問甚麼了囧
問下一個@@
====引用===
但當第二個迴圈開始時
loop 1: $v($a[2]) = $a[0] = 'zero'
loop 2: $v($a[2]) = $a[1] = 'one'
loop 3: $v($a[2]) = $a[2] = 'one'
====引用===
為甚麼一直都是$a[2]的呢=0=
因為第一個迴圈最後&$v
"停留在"指向$a[2],這個沒問題吧
所以不管這時給$v什麼值
其實就是改變$a[2]的值
所以第二個迴圈
loop 1:將$a[0]的值塞給$v, $a[2]變成zero
loop 2:將$a[1]的值塞給$v, $a[2]變成one
loop 3:將$a[2]的值塞給$v, $a[2]變成one
清楚吧 = =+
唔...大概明吧@@
但總是差了點甚麼的樣子~_~
我再想想吧
謝謝~
張貼留言