51、reset
将数组的内部指针指向第一个单元
<?php
$array = array('step one', 'step two', 'step three', 'step four');
// 默认情况下,指针指向第一个元素
echo current($array) . "<br />\n"; // "step one"
// 跳过两步
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"
// 重置指针,重新指向第一个元素
reset($array);
echo current($array) . "<br />\n"; // "step one"
?>
52、count
统计数组、Countable 对象中所有元素的数量
示例1:
<?php
$a[0] = 1;
$a[1] = 3;
$a[2] = 5;
var_dump(count($a));
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
var_dump(count($b));
以上例程会输出:
int(3) int(3)
示例2: 非 Countable|array 的例子 (这是个反例,请勿模仿)
<?php
$b[0] = 7;
$b[5] = 9;
$b[10] = 11;
var_dump(count($b));
var_dump(count(null));
var_dump(count(false));
?>
以上例程会输出:
int(3) int(0) int(1)
示例3:递归 count() 例子
<?php
$food = array('fruits' => array('orange', 'banana', 'apple'),
'veggie' => array('carrot', 'collard', 'pea'));
// 递归计数
var_dump(count($food, COUNT_RECURSIVE));
// 常规计数
var_dump(count($food));
?>
以上例程会输出:
int(8) int(2)
示例4: Countable 对象
<?php
class CountOfMethods implements Countable
{
private function someMethod()
{
}
public function count(): int
{
return count(get_class_methods($this));
}
}
$obj = new CountOfMethods();
var_dump(count($obj));
?>
以上例程会输出:
int(2)
53、foreach
foreach
语法结构提供了遍历数组的简单方式。foreach
仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。有两种语法:
foreach (iterable_expression as $value)
statement
foreach (iterable_expression as $key => $value)
statement
第一种格式遍历给定的
iterable_expression
迭代器。每次循环中,当前单元的值被赋给$value
。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量
$key
。
注意
foreach
不会修改类似 current() 和 key() 函数所使用的数组内部指针。还能够自定义遍历对象。
可以很容易地通过在
$value
之前加上 & 来修改数组的元素。此方法将以引用赋值而不是拷贝一个值。
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// 现在 $arr 是 array(2, 4, 6, 8)
unset($value); // 最后取消掉引用
?>
警告
数组最后一个元素的
$value
引用在foreach
循环之后仍会保留。建议使用 unset() 来将其销毁。 否则你会遇到下面的情况:
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// 现在 $arr 是 array(2, 4, 6, 8)
// 未使用 unset($value) 时,$value 仍然引用到最后一项 $arr[3]
foreach ($arr as $key => $value) {
// $arr[3] 会被 $arr 的每一项值更新掉…
echo "{$key} => {$value} ";
print_r($arr);
}
// 直到最终倒数第二个值被复制到最后一个值
// output:
// 0 => 2 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 2 )
// 1 => 4 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 4 )
// 2 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
// 3 => 6 Array ( [0] => 2, [1] => 4, [2] => 6, [3] => 6 )
?>
可以通过引用来遍历数组常量的值:
<?php
foreach (array(1, 2, 3, 4) as &$value) {
$value = $value * 2;
}
?>
54、extract
本函数用来将变量从数组中导入到当前的符号表中。
检查每个键名看是否可以作为一个合法的变量名,同时也检查和符号表中已有的变量名的冲突。
警告
//extract与list作用类似
extract(['name'=>'相机','price'=>10000]);
echo $name . ',' . $price . '<hr>';
以上例程会输出:
相机,10000
$staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo '<hr>';
if(count($staffs) === 0){
echo '查询结果为空';
}else{
foreach($staffs as $staff) {
//!extract()函数 将一个关联数组直接解析到一个变量列表中
extract($staff);//$id,$name,$sex,$email
printf('%d-%s-%s-%s<br>',$id,$name,$sex,$email);
}
}
echo '<hr>';
55、array_values
返回
input
数组中所有的值并给其建立数字索引。
示例1:
<?php
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
?>
以上例程会输出:
Array ( [0] => XL [1] => gold )
示例2:
//array_values():将数组的值,组成一个新数组,键名会重置
$arr = [0=>1,1=>88,2=>88,3=>'php',5=>true,6=>[1,2,3]];
printf('<pre>%s</pre>',print_r($arr,true));
echo '<hr>';
printf('<pre>%s</pre>',print_r(array_values($arr),true));
echo '<hr>';
以上例程会输出:
Array ( [0] => 1 [1] => 88 [2] => 88 [3] => php [5] => 1 [6] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
Array ( [0] => 1 [1] => 88 [2] => 88 [3] => php [4] => 1 [5] => Array ( [0] => 1 [1] => 2 [2] => 3 ) )
56、in_array
检查数组中是否存在某个值
如果找到
needle
则返回true
,否则返回false
。
示例1:
<?php
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
if (in_array("mac", $os)) {
echo "Got mac";
}
?>
第二个条件失败,因为 in_array() 是区分大小写的,所以以上程序显示为:
Got Irix
示例2:
<?php
$a = array('1.10', 12.4, 1.13);
if (in_array('12.4', $a, true)) {
echo "'12.4' found with strict check\n";
}
if (in_array(1.13, $a, true)) {
echo "1.13 found with strict check\n";
}
?>
如果第三个参数
strict
的值为true
则 in_array() 函数还会检查needle
的类型是否和haystack
中的相同。
以上例程会输出:
1.13 found with strict check
示例3:in_array() 中用数组作为 needle
<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');
if (in_array(array('p', 'h'), $a)) {
echo "'ph' was found\n";
}
if (in_array(array('f', 'i'), $a)) {
echo "'fi' was found\n";
}
if (in_array('o', $a)) {
echo "'o' was found\n";
}
?>
以上例程会输出:
'ph' was found 'o' was found
57、array_search
在数组中搜索给定的值,如果成功则返回首个相应的键名
<?php
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array); // $key = 1;
?>
58、array_unique
接受
array
作为输入并返回没有重复值的新数组。
注意: 当且仅当
(string) $elem1 === (string) $elem2
时两个单元被认为相同。 例如,字符串表达一样时,会使用首个元素。
<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>
以上例程会输出:
Array ( [a] => green [0] => red [1] => blue )
59、array_unique() 和类型
<?php
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
?>
以上例程会输出:
array(2) { [0] => int(4) [2] => string(1) "3" }
注意: 注意, array_unique() 不能应用于多维数组。
60、@
//加@可以取消报错
@printf('<pre>%s</pre>',print_r(array_unique($arr),true));