57

我正在尝试创建一个类来处理数组,但我似乎无法array_map()在其中工作。

<?php
//Create the test array
$array = array(1,2,3,4,5,6,7,8,9,10);
//create the test class
class test {
//variable to save array inside class
public $classarray;

//function to call array_map function with the given array
public function adding($data) {
    $this->classarray = array_map($this->dash(), $data);
}

// dash function to add a - to both sides of the number of the input array
public function dash($item) {
    $item2 = '-' . $item . '-';
    return $item2;
}

}
// dumps start array
var_dump($array);
//adds line
echo '<br />';
//creates class object
$test = new test();
//classes function adding
$test->adding($array);
// should output the array with values -1-,-2-,-3-,-4-... 
var_dump($test->classarray);

这输出

array(10) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) [9]=> int(10) }

Warning: Missing argument 1 for test::dash(), called in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 11 and defined in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 15

Warning: array_map() expects parameter 1 to be a valid callback, function '--' not found or invalid function name in D:\xampp\htdocs\trainingdvd\arraytesting.php on line 11 NULL

我做错了什么或者这个功能在类中不起作用?

4

6 回答 6

154

dash以错误的方式指定为回调。

这不起作用:

$this->classarray = array_map($this->dash(), $data);

这样做:

$this->classarray = array_map(array($this, 'dash'), $data);

在此处了解回调可能采用的不同形式。

于 2011-03-24T16:20:41.280 回答
42

你好 你可以使用 喜欢这个

    // Static outside of class context
array_map( array( 'ClassName', 'methodName' ), $array );

// Static inside class context
array_map( array( __CLASS__, 'methodName' ), $array );

// Non-static outside of object context
array_map( array( $object, 'methodName' ), $array );

// Non-static inside of object context
array_map( array( $this, 'methodName' ), $array );
于 2013-12-26T05:34:02.083 回答
2

array_map($this->dash(), $data)使用 0 个参数调用$this->dash()并使用返回值作为回调函数应用于数组的每个成员。你想要array_map(array($this,'dash'), $data)

于 2011-03-24T16:21:45.847 回答
1

它必须阅读

$this->classarray = array_map(array($this, 'dash'), $data);

-thingarray是对象实例方法的PHP 回调。对常规函数的回调被定义为包含函数名 ( 'functionName') 的简单字符串,而静态方法调用被定义为array('ClassName, 'methodName')或类似这样的字符串:('ClassName::methodName'从 PHP 5.2.3 开始有效)。

于 2011-03-24T16:20:57.830 回答
1

如果该类属于不同的命名空间,则需要使用完整的命名空间类名称。下面是一个使用 CakePHP Utility 类的例子:

这将不起作用:

array_map(array('Inflector', 'humanize'), $some_array));

这将起作用:

array_map(array('Cake\Utility\Inflector', 'humanize'), $some_array));
于 2021-09-16T09:07:33.207 回答
0

对于多维数组(任何数组):

    $data = array_map('decode'), $data);

    function decode($data)
    {
        if (is_array($data)) {
            foreach ($data as &$value) {
                if (is_array($value)) {
                    $value = decode($value);
                } else {
                    $value = html_entity_decode($value);
                }
            }
        } else {
            $data = html_entity_decode($data);
        }
        return $data;
    }

对于 Class 中的多维数组(任何数组):

$data = array_map(array($this,'decode'), $data);

private function decode($data)
{
    if (is_array($data)) {
        foreach ($data as &$value) {
            if (is_array($value)) {
                $value = $this->decode($value);
            } else {
                $value = html_entity_decode($value);
            }
        }
    } else {
        $data = html_entity_decode($data);
    }
    return $data;
}
于 2021-02-15T12:25:50.367 回答