如何访问array_walk中的其他变量?

时间:2016-12-27 06:33:53

标签: php codeigniter parameters array-walk

我有一个变量$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

任何解决方案?

感谢您的建议

5 个答案:

答案 0 :(得分:6)

您可以使用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) {

答案 1 :(得分: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
        )
)

答案 2 :(得分:0)

你可以使用如下函数将$ id传递给你的函数array_walk:

Traceback (most recent call last):
  File "REDACTED", line 3, in <module>
tkvar = IntVar()
  File "/home/redacted/apps/thonny/lib/python3.5/tkinter/__init__.py",   line 351, in __init__
Variable.__init__(self, master, value, name)
  File "/home/redacted/apps/thonny/lib/python3.5/tkinter/__init__.py", line 233, in __init__
self._root = master._root()
AttributeError: 'NoneType' object has no attribute '_root'

答案 3 :(得分:0)

变量的范围是定义它的上下文。在大多数情况下,所有PHP变量只有一个范围。此单一范围也涵盖包含和所需文件。

  

在函数外部使用全局关键字不是错误。有可能   如果文件包含在函数内部,则使用。

$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;

答案 4 :(得分:0)

将参数添加到此use(),如果您要修改$id,请使用&amp;参考转换,否则按值转换。

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

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