標籤:blog os 使用 io for ar div cti log
<?php/** * 1、寫函數建立長度為10的數組。數組中的元素為遞增的奇數。首項為1。 */$ary = range(1, 10);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 ) print_r($ary);/** * 2、建立長度為10的數組,數組中的元素為遞增的等比數,比值為3。首項為1 */function myfun($n){return pow(3, $n-1);}$ary = range(1, 10);$result = array_map(‘myfun‘,$ary);echo ‘<br>‘;//Array ( [0] => 1 [1] => 3 [2] => 9 [3] => 27 [4] => 81 [5] => 243 [6] => 729 [7] => 2187 [8] => 6561 [9] => 19683 ) print_r($result);/** * 3、求數組中最大數所在的下標; * $arr = array(1,5,67,8,4,3,45,6,887,2); */$arr = array(1,5,67,8,4,3,45,6,887,2);$max = $arr[0];//假設第一個數是最大的$index = 0;//記錄最大數的key值,即下標foreach ($arr AS $key=>$val) {if ($max < $val) {$max = $val;$index = $key;}}//最大數是:887,其下標是:8echo ‘<br>最大數是:‘.$max . ‘,其下標是:‘ . $index;/* $mval = max($arr);echo ‘<br>‘;print_r(array_search($mval, $arr)); *//** * 4、建立一個長度為10的數組,數組中的元素滿足斐波拉齊數列的規律; */$arr = array(1,1);for ($i=2; $i<10; $i++) {$arr[] = $arr[$i-1]+$arr[$i-2];}echo ‘<br>‘;//Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 [4] => 5 [5] => 8 [6] => 13 [7] => 21 [8] => 34 [9] => 55 ) print_r($arr);/** * 5、計算數組中最大數和最小數的差; */$arr = array(1,5,67,8,4,3,45,6,887,2);/*系統函數簡單實現 * $minv = min($arr);$maxv = max($arr);echo ‘<br>‘;echo ‘最大數是:‘ . $maxv .‘,最小數是:‘.$minv.‘,差是:‘.($maxv-$minv); *//*不使用系統函數實現*/$max = $arr[0];//假設第一個數是最大的$min = $arr[0];//假設第一個數也是最小的foreach ($arr AS $key=>$val) {if ($max < $val) {$max = $val;} elseif ($min > $val) {$min = $val;}}echo ‘<br>‘;//最大數是:887,最小數是:1,差是:886echo ‘最大數是:‘ . $max .‘,最小數是:‘.$min.‘,差是:‘.($max-$min);/** * 6、寫一個方法,將一個長度超過10的數組最後5項直接截取,不改變順序直接變為前5項, * 如{1,2,3,4,5,6,7,8,9,10,11,12}在經過方法後變為:{8,9,10,11,12,1,2,3,4,5,6,7} */function arrayHandel(&$ary, $count = 5) {if (!(is_array($ary) && count($ary)>10 && count($ary)>$count)) {return false;}$len = count($ary);while ($count>0) {$i = $len-1;$count--;array_unshift($ary, $ary[$i]);array_pop($ary);}}$array = array(1,2,3,4,5,6,7,8,9,10,11,12,13);echo ‘<br>‘;arrayHandel($array);//Array ( [0] => 9 [1] => 10 [2] => 11 [3] => 12 [4] => 13 [5] => 1 [6] => 2 [7] => 3 [8] => 4 [9] => 5 [10] => 6 [11] => 7 [12] => 8 ) print_r($array);/** * * 7、將兩個數組串連成一個新數組; * array_combine($keys, $values) 一個作鍵,一個作值,但是兩個數組個數必須一致,不然會返回false * array_merge($array1) 覆蓋相同的鍵名 * array_merge_recursive($array1) 不覆蓋相同鍵名,組成以鍵名組成的數組集合 * */$arr1 = array(‘a‘=>123,‘b‘=>1234);$arr2 = array(‘os‘=>‘linux‘,‘db‘=>‘mysql‘,‘language‘=>‘php‘,‘server‘=>‘nginx‘,‘b‘=>1256);echo ‘<br>‘;//Array ( [a] => 123 [b] => 1234 [os] => linux [db] => mysql [language] => php [server] => nginx ) print_r($arr1+$arr2);//$arr1會覆蓋$arr2中相同索引值,運算是從右至左,所以左邊的覆蓋右邊echo ‘<br>‘;//boolean falsevar_dump(array_combine($arr1,$arr2));//boolean falseecho ‘<br>‘;//Array ( [a] => 123 [b] => 1256 [os] => linux [db] => mysql [language] => php [server] => nginx ) print_r(array_merge($arr1,$arr2));//$arr1和$arr2中的相同的元素被後一個$arr2的覆蓋echo ‘<br>‘;//Array ( [a] => 123 [b] => Array ( [0] => 1234 [1] => 1256 ) [os] => linux [db] => mysql [language] => php [server] => nginx )print_r(array_merge_recursive($arr1,$arr2));/** * 數組逆序(不能直接使用rsort函數,不能產生新數組); */$ary = array(‘apple‘,‘juice‘,‘orange‘,‘85‘,‘0‘,‘app‘,‘1‘,‘2‘,‘5‘,‘z‘);/* rsort($ary);echo ‘<br>‘;print_r($ary); */for ($i=0;$i<count($ary);$i++){for ($j=$i+1;$j<count($ary);$j++){if($ary[$i]<$ary[$j]){$temp = $ary[$i];$ary[$i] = $ary[$j];$ary[$j] = $temp;}}}echo ‘<br>‘;//Array ( [0] => z [1] => orange [2] => juice [3] => apple [4] => app [5] => 85 [6] => 5 [7] => 2 [8] => 1 [9] => 0 ) print_r($ary);
/** * 9、在長度為10的升序有序數組中插入一個數字,組成新數組,保證數組順序(不能直接使用sort) */$arr = range(1, 40, 2);function insertAry($ary, $val) {$endAry = array();$len = count($ary);$index = 0;if ($ary[$len-1] < $val) {//若插入數比數組中任意數大$ary[] = $val;$endAry = $ary;return $endAry; }while ($index<$len) {if ($ary[$index]>=$val){$endAry[$index++] = $val;for($i = $index;$i<$len+1;$i++){$endAry[$i] = $ary[$i-1]; }break;} else {$endAry[$index] = $ary[$index];}$index++;}return $endAry;}echo ‘<br>‘;//Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 [5] => 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 [10] => 21 [11] => 23 [12] => 25 //[13] => 27 [14] => 29 [15] => 31 [16] => 33 [17] => 35 [18] => 37 [19] => 39 [20] => 88 ) print_r(insertAry($arr,88));
/** * 10、將一個無序數組排列成升序數組;(冒泡排序) */$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2);$len = count($arr);for ($i=0; $i<$len; $i++) {for ($j=$len-1; $j>$i; $j--) {if ($arr[$j]<$arr[$j-1]) {$temp = $arr[$j];$arr[$j] = $arr[$j-1];$arr[$j-1] = $temp;}}}echo ‘<br>‘;//Array ( [0] => -9 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 8 [8] => 11 [9] => 45 [10] => 67 [11] => 887 [12] => 888 )print_r($arr);/*********選擇排序************/$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2);for ($i=0; $i<$len; $i++) {for ($j=$i+1; $j<$len; $j++) {if ($arr[$j]<$arr[$i]) {$temp = $arr[$j];$arr[$j] = $arr[$i];$arr[$i] = $temp;}}}echo ‘<br>‘;//Array ( [0] => -9 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 8 [8] => 11 [9] => 45 [10] => 67 [11] => 887 [12] => 888 )print_r($arr);/** * 11、對有序數組進行洗牌操作;(不能直接使用shuffle函數) */$arr = range(1, 40, 2);echo ‘<br>‘;echo ‘<br>$arr打亂前:‘;//$arr打亂前:Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 [5] => 11 [6] => 13 [7] => 15 [8] => 17 [9] => 19 [10] => 21 [11] => 23
//[12] => 25 [13] => 27 [14] => 29 [15] => 31 [16] => 33 [17] => 35 [18] => 37 [19] => 39 ) print_r($arr);function shuffleDemo($arr) {$resultAry = array();$len = count($arr);while ($len>0) {$index = rand(0, $len-1);$resultAry[] = $arr[$index];array_splice($arr, $index,1);$len--;}return $resultAry;}echo ‘<br>‘;echo ‘<br>$arr打亂後:‘;//$arr打亂後:Array ( [0] => 3 [1] => 33 [2] => 11 [3] => 15 [4] => 5 [5] => 39 [6] => 1 [7] => 25 [8] => 35 [9] => 29 [10] => 13 [11] => 27
//[12] => 23 [13] => 7 [14] => 37 [15] => 19 [16] => 9 [17] => 17 [18] => 31 [19] => 21 )print_r(shuffleDemo($arr));
/** * 12、刪除數組中指定位置的元素;(參考unset函數) */function deleteAryElement(&$arr, $index){if (!(is_array($arr) && count($arr)>$index)) {return false;}unset($arr[$index]);}$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2);deleteAryElement($arr,2);echo ‘<br>‘;//Array ( [0] => 888 [1] => -9 [3] => 11 [4] => 5 [5] => 67 [6] => 8 [7] => 4 [8] => 3 [9] => 45 [10] => 6 [11] => 887 [12] => 2 ) print_r($arr);
/** * 13、將數組中素數刪除群組成新數組 */function filtFun($val) {//自訂過濾素數函數$flag = true;//判斷是否是素數if (is_int($val)) {if ($val<=0) {$flag = false;}for ($i=$val-1;$i>1;$i--) {if ($val%$i==0) {$flag = false;break;}}} else {$flag = false;}return !$flag;}$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2,‘a‘);$rary = array_filter($arr, ‘filtFun‘);echo ‘<br>‘;//Array ( [0] => 888 [1] => -9 [6] => 8 [7] => 4 [9] => 45 [10] => 6 [13] => a )print_r($rary);
/** * 14、寫函數檢查數組中是否存在某個元素(不能直接使用in_array) */function exsitEle($arr, $value) {if (!(is_array($arr) && count($arr)>0)) {return false;}foreach ($arr AS $key=>$val) {if ($val==$value) {return true;}}return false;}$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2,‘a‘,array(‘a‘=>14,‘b‘=>48));//boolean truevar_dump(exsitEle($arr, array(‘a‘=>14,‘b‘=>48)));/** * 15、寫函數,向數組最後追加一個元素(不能直接使用array_push) */$arr = array(888,-9,1,11,5,67,8,4,3,45,6,887,2,‘a‘,array(‘a‘=>14,‘b‘=>48));$arr[] = ‘abcd‘;echo ‘<br>‘;//Array ( [0] => 888 [1] => -9 [2] => 1 [3] => 11 [4] => 5 [5] => 67 [6] => 8 [7] => 4 [8] => 3 [9] => 45 [10] => 6 //[11] => 887 [12] => 2 [13] => a [14] => Array ( [a] => 14 [b] => 48 ) [15] => abcd )print_r($arr);/** * 16、寫函數,求數組中所有元素之和(不能直接使用array_sum) */$arr = array(888,-9,1,11,5,67,8,4,3,45,6,-102);function countAry($arr) {if (!(is_array($arr) && count($arr)>0)) {return false;}$sum = 0;foreach ($arr AS $key=>$val) {$sum += $val;}return $sum;}echo ‘<br>‘;//927print_r(countAry($arr));
php數組功能非常強大,自己對php數組的練習學習。以後也可以在此加深印象,鞏固學習!
php數組練習十六道題