array_map 在类中不起作用

Posted

技术标签:

【中文标题】array_map 在类中不起作用【英文标题】:array_map not working in classes 【发布时间】:2011-07-22 06:57:22 【问题描述】:

我正在尝试创建一个类来处理数组,但我似乎无法让 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]=&gt; int(1) [1]=&gt; int(2) [2]=&gt; int(3) [3]=&gt; int(4) [4]=&gt; int(5) [5]=&gt; int(6) [6]=&gt; int(7) [7]=&gt; int(8) [8]=&gt; int(9) [9]=&gt; 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

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

【问题讨论】:

Passing object method to array_map()的可能重复 【参考方案1】:

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

这不起作用:

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

这样做:

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

了解回调可能采用的不同形式here。

【讨论】:

感谢您的快速重播。我得到了它的工作,感谢你的帮助。我只是想知道您是否碰巧有更多关于回调以及如何正确指定的文章? @Justin:看这里:***.com/questions/48947/… 甚至像 array_map(@[ self, 'dash']) 一样静态工作 如何使用破折号函数传递参数? @Nielsapp 你不能直接,你必须传入一个可调用的,它将有效地绑定你想要的参数,例如array_map(function($item) return $this-&gt;dash($item, 'additional argument'); , $data)【参考方案2】:

必读

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

array-thing 是对象实例方法的PHP callback。对常规函数的回调定义为包含函数名称的简单字符串 ('functionName'),而静态方法调用定义为 array('ClassName, 'methodName') 或类似的字符串:'ClassName::methodName'(自 PHP 5.2.3 起有效)。

【讨论】:

感谢您的回答。我非常有帮助您是否碰巧知道有关此主题的更多文章?再次感谢,【参考方案3】:

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

【讨论】:

【参考方案4】:

你好,你可以这样用

    // 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 );

【讨论】:

【参考方案5】:

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

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

对于类中的多维数组(任意数组):

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

【讨论】:

【参考方案6】:

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

这不起作用:

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

这将起作用:

array_map(array('Cake\Utility\Inflector', 'humanize'), $some_array));

【讨论】:

以上是关于array_map 在类中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

super() 在类方法中不起作用

Django @csrf_exempt 在类视图中不起作用

Snackbar 在片段类中不起作用

为啥 Invoke 在另一个类中不起作用

setNavigationBarHidden 在其他类中不起作用(Swift 3.0)

onClickListener 在 Recycler Adapter 类中不起作用