4

我有一个变量$id = 10,它需要在里面使用array_walk()。如下所示:

$id = 10;
array_walk($profile_items, function(&$a) {
    $count = $this->db->where('profile_item_id', $a['id'])->where('cover_type_id', $id)->count_all_results('cover_type_profile_items_link');
    $a['selected'] = $id;
});
echo "<pre>";
print_r($profile_items).exit;

当我$id在其中使用变量array_walk()时显示错误。

消息:未定义变量:id

有什么解决办法吗?

谢谢你的建议

4

5 回答 5

13

您可以使用use关键字:

array_walk($profile_items, function(&$a) use($id) {

所以,

$id = 10;
array_walk($profile_items, function(&$a) use($id) {
    $count = $this->db->where('profile_item_id', $a['id'])->where('cover_type_id', $id)->count_all_results('cover_type_profile_items_link');
    $a['selected'] = $id;
});
echo "<pre>";
print_r($profile_items);

要通过引用继承,请添加 & 符号:

array_walk($profile_items, function(&$a) use(&$id) {
于 2016-12-27T06:36:52.000 回答
2
    $sample = [
        ['id'=>2, 'name' => 'one'],
        ['id'=>3, 'name' => 'two'],
    ];
    $id = 2;
    function test_alter(&$item1, $key, $prefix)
    {   
    if($item1['id'] == $prefix){
        $item1['name'] =  $item1['name']." modified";
        }            
    }
    array_walk($sample, 'test_alter', $id);
    echo "<pre>";
    print_r($sample);

输出

Array(
    [0] => Array
        (
            [id] => 2
            [name] => one modified
        )
    [1] => Array
        (
            [id] => 3
            [name] => two
        )
)
于 2019-07-30T05:20:51.760 回答
1

变量的范围是定义它的上下文。大多数情况下,所有 PHP 变量都只有一个作用域。这个单一范围也涵盖了包含和必需的文件。

在函数外部使用 global 关键字不是错误。如果文件包含在函数内部,则可以使用它。

$id = 10;
array_walk($profile_items, function(&$a) {
global $id;
    $count = $this->db->where('profile_item_id', $a['id'])->where('cover_type_id', $id)->count_all_results('cover_type_profile_items_link');
    $a['selected'] = $id;
});
echo "<pre>";
print_r($profile_items).exit;
于 2016-12-27T07:13:07.867 回答
1

像这样添加参数use(),如果要修改$id,则通过引用 & 传递,否则通过值传递。

array_walk($value, function($v, $k) use ($id){});

或者

array_walk($value, function($v, $k) use (&$id){});
于 2016-12-27T07:17:45.113 回答
0

您可以使用以下方法将 $id 传递给您的函数 array_walk:

  $id = 10;
  array_walk($profile_items, function(&$a) use($id){
  $count = $this->db->where('profile_item_id', $a['id'])->where('cover_type_id', $id)->count_all_results('cover_type_profile_items_link');
 $a['selected'] = $id;
});
echo "<pre>";
 print_r($profile_items).exit;
于 2016-12-27T06:44:18.447 回答