PHP學習——17 PHP數組(數組的鍵值操作、統計操作、array_filter過濾、array_walk 、array_map)

一、數組的鍵值操作

<?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 區 )

?>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章