06-PHP使用过的函数 51-60

本文介绍了PHP中几个重要的数组操作函数,如reset重置数组指针,count统计数组元素数量,foreach用于遍历数组,extract将数组导入符号表,array_values获取数组的值为新数组,in_array检查数组是否存在特定值,array_unique去除数组重复元素等。同时,文中也提到了在使用这些函数时应注意的细节和陷阱。
摘要由CSDN通过智能技术生成

  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(),类似用户输入 (例如 $_GET$_FILES)。

//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));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七色的天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值