1. 程式人生 > >PHP學習——17 PHP中的陣列及其使用技巧(二)

PHP學習——17 PHP中的陣列及其使用技巧(二)

一、陣列的鍵值操作

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

?>