PHP学习——17 PHP中的数组及其使用技巧(二)

版权声明:本文为博主原创文章,仅供学习交流,未经博主允许不得转载。 https://blog.csdn.net/zjy_android_blog/article/details/83049543

一、数组的键值操作

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

?>

猜你喜欢

转载自blog.csdn.net/zjy_android_blog/article/details/83049543