返回

PHP 闭包中如何从外部数组访问索引?

php

## 在 PHP 闭包中从外部数组访问索引

当需要在 PHP 闭包内部访问外部函数中的数组数据时,可以使用以下步骤:

步骤 1:使用闭包

$website->filter('p > a')->each(function ($node) use ($data, $i) {
    // 代码在此处执行
});

步骤 2:传递变量

each() 方法中,使用 use 将外部变量传递给闭包:

->each(function ($node) use ($data, $i) {
    // 代码在此处执行
});

步骤 3:使用变量

在闭包内部,可以使用传递的变量来访问外部数组数据:

$anchorText = $data[$i]["anchor_text"];
if($node->text() == $anchorText){
    echo "anchor encontrado: ".$node->text();
}

解决问题

通过使用闭包和 use 关键字,可以方便地从 PHP 闭包内部访问外部数组。这对于需要对每个元素执行自定义操作的复杂数据处理场景非常有用。

代码示例

例如,考虑一个需要检查给定锚文本是否存在于网页中的代码段:

for($i=1; $i<count($data); $i++){
    $file_headers = @get_headers($data[$i]["post_url"]);
    if(!$file_headers || $file_headers[0] == 'HTTP/1.1 404 Not Found' || !strpos($file_headers[0],"200")) {
        $exists = false;
        $access_ko[] = $data[$i]["order"];
    }else{
        $client = new Client();
        $website = $client->request('GET', $data[$i]["post_url"]);
        $website->filter('p > a')->each(function ($node) use ($data, $i) {

            $anchorText = $data[$i]["anchor_text"];
            if($node->text() == $anchorText){
                echo "anchor encontrado: ".$node->text();
            }else{
                echo "anchor a encontrar: " . $anchorText;
            }  

        });// END EACH FUNCTION
    }
}

在上面的代码段中,闭包使用 use 关键字来访问外部变量 $data$i。这允许闭包检查给定锚文本是否存在于网页中。

常见问题解答

1. 什么时候应该使用这种技术?

当需要在 PHP 闭包内部访问外部函数中的数组数据时。

2. 我可以用这种技术做什么?

你可以执行各种数据处理任务,例如过滤、映射和分组。

3. 是否有其他方法可以访问外部数组?

是,可以使用全局变量,但这种方法不鼓励使用。

4. 我是否可以将多个数组传递给闭包?

是的,可以使用 use 关键字传递任意数量的数组。

5. 为什么在闭包中使用 use 关键字很重要?

use 关键字确保闭包可以访问外部变量,而无需声明为全局变量。