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]=> 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
我做错了什么或者这个函数在类中不起作用?
【问题讨论】:
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->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->dash(), $data)
使用 0 个参数调用 $this->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 在类中不起作用的主要内容,如果未能解决你的问题,请参考以下文章