使用数组时PHP错误

时间:2012-03-08 23:23:46

标签: php arrays

我从以下代码的第一行收到此错误:

    Fatal error: Only variables can be passed by reference in /home/path/file.php on line 36



        if (isset($_POST['id']))
        {
            $ids = array_walk('intval', $_POST['id']);

            $sql = "DELETE FROM table WHERE id IN (' . implode(',', $ids) . ')')";
            //run query here

            $msg->type = "success";
            $msg->text = "Bulk delete has been successful";
        }

任何想法可能是什么?

顺便说一句,上面的代码是批量删除项目。

错误是由$ids = array_walk('intval', $_POST['id']);

引起的

4 个答案:

答案 0 :(得分:2)

您对函数array_walk的调用不正确

bool array_walk ( array &$array , callback $funcname [, mixed $userdata = NULL ] )

尝试这一点,并假设$_POST['id']是一个数组

$ids = array_walk($_POST['id'], 'intval');

http://php.net/manual/en/function.array-walk.php

也可以在调用函数之前检查以确保$_POST['id']是数组

修改

在查看您的工作后,您需要使用的功能是array_maparray_walk返回一个布尔值,而array_map返回一个数组,这是您在implode上使用$ids后需要返回的数据。

所以你需要

$ids = array_map('intval', $_POST['id']);

答案 1 :(得分:1)

array_walk为每个数组调用一个函数,并将函数作为参数0.我认为你需要改变:

array_walk('intval', $_POST['id']);array('intval', $_POST['id']);

答案 2 :(得分:0)

第36行是哪一行?此外,您似乎在SQL语句中有一个额外的括号。此外,$ _POST变量真的是一个数组吗?

答案 3 :(得分:0)

也许您已更改$ids = array_walk('intval', $_POST['id']);中参数的顺序?在我看来,它应该是$ids = array_walk($_POST['id'],'intval');