一、數組的鍵值操作
<?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 區 )
?>