PHP學習——17 PHP中的陣列及其使用技巧(二)
阿新 • • 發佈:2018-12-16
一、陣列的鍵值操作
<?php // 1.array_values — 返回陣列中所有的值的預設索引陣列(返回array型別) // 用在只需要對陣列元素的值感興趣的場合,例如大量資料的搜尋等 $arr = ['name'=>'Tom','age'=>23,'job'=>'engineer']; $arr1 = array_values($arr); echo '<pre>'; print_r($arr1); echo '</pre>'; // Array // ( // [0] => Tom // [1] => 23 // [2] => engineer // ) echo '<hr>'; // 2.array_keys — 返回陣列中部分的或所有的鍵名(返回array型別) $arr2 = array_keys($arr); echo '<pre>'; print_r($arr2); echo '</pre>'; echo '<hr>'; // 3.array_key_exists — 檢查數組裡是否有指定的鍵名或索引(返回bool型別) var_dump(array_key_exists('name1',$arr)); // bool(false) echo '<br>'; var_dump(array_key_exists('Name',$arr)); // bool(false) echo '<br>'; var_dump(array_key_exists('name',$arr)); // bool(true) echo '<hr>'; // 4.in_array — 檢查陣列中是否存在某個值(返回bool型別) var_dump(in_array('Tom1',$arr)); // bool(false) echo '<br>'; var_dump(in_array('Tom',$arr)); // bool(true) echo '<br>'; var_dump(in_array('tom',$arr)); // bool(false) echo '<hr>'; // array_key_exists和in_array的值比較是區分大小寫的 // 5.array_search — 在陣列中搜索給定的值,如果成功則返回首個相應的鍵名 var_dump(array_search('Tom',$arr)); // string(4) "name" ?>
二、陣列的統計操作
<?php // 1.count — 計算陣列中的單元數目,或物件中的屬性個數 $arr = [1,2,3,4,['a','b',[5,6,7]]]; echo count($arr).'<br>'; // 5 echo count($arr,1); // 11 // 第二個引數可以是0或者1,為1時,代表遞迴的計算元素個數(計算多維陣列的元素個數),預設值為0 // 2.array_count_values — 統計陣列中所有的值出現的次數,返回一個數組:陣列的鍵是數組裡元素的值, 陣列的值是陣列元素值出現的次數。 $arr2 = ['name'=>'Tom','age'=>23,'job'=>'engineer','name2'=>'Tom']; echo '<pre>'; print_r(array_count_values($arr2)); echo '</pre>'; // Array // ( // [Tom] => 2 // [23] => 1 // [engineer] => 1 // ) // 3.array_unique — 移除陣列中重複的值,保留第一個重複元素值的鍵名,返回過濾後的陣列。 $arr3 = ['name'=>'Tom','age'=>23,'job'=>'engineer','name2'=>'Tom']; echo '<pre>'; print_r($arr3); echo '</pre>'; $arr4 = array_unique($arr3); echo '<pre>'; print_r($arr4); echo '</pre>'; ?>
三、用回撥函式對陣列操作
<?php // 1. array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) // 依次將 array 陣列中的每個值傳遞到 callback 函式。如果 callback 函式返回 true,則 array 陣列的當前值會被包含在返回的結果陣列中。陣列的鍵名保留不變 function odd($var){ return($var & 1); // 按位與運算,只有奇數才可以返回1,否則返回0 } function even($var){ return(!($var & 1));// 返回偶數 } $arr = ["a"=>3, "b"=>4, "c"=>5, "d"=>6, "e"=>7]; echo "Odd :<pre>"; print_r(array_filter($arr, "odd")); echo "Even:\n"; print_r(array_filter($arr, "even",1)); echo '</pre>'; // Odd : // Array // ( // [a] => 1 // [c] => 3 // [e] => 5 // ) // Even: // Array // ( // [b] => 2 // [d] => 4 // ) function test($value,$key){ echo $key.'=>'.$value.'<br>'; return true; } echo "使用鍵名和鍵值作為引數 :<pre>"; print_r(array_filter($arr, 'test',1)); echo '</pre>'; // 2. bool array_walk ( array &$array , callable $callback [, mixed $userdata = NULL ] ) // 使用使用者自定義函式對陣列中的每個元素做回撥處理 $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix){ $item1 = "$prefix: $item1"; } function test_print($item2, $key){ echo "$key. $item2<br>\n"; } echo "Before ...:<br>"; array_walk($fruits, 'test_print'); // 對陣列元素直接操作增加字首 'fruit' array_walk($fruits, 'test_alter', 'fruit'); echo "... and after:<br>"; array_walk($fruits, 'test_print'); // 3. array array_map ( callable $callback , array $array1 [, array $... ] ) // 為陣列的每個元素應用回撥函式,即可同時操作多個數組,返回一個新陣列:預設索引陣列 // 回撥函式的引數數量,必須與要處理的陣列數量一致,每個引數對應每個陣列的值 // 對一個數組操作 $arr1 = [1,2,3,4,5]; function func1($value1){ return $value1*2; } print_r(array_map('func1',$arr1)); //Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 [4] => 10 ) $arr2 = ['番禺','天河','增城','白雲','越秀']; function func2($value1,$value2){ $value1 = $value1*2; return "$value2: $value1 區"; } print_r(array_map('func2',$arr1,$arr2)); // Array ( [0] => 番禺: 2 區 [1] => 天河: 4 區 [2] => 增城: 6 區 [3] => 白雲: 8 區 [4] => 越秀: 10 區 ) ?>