2011-03-24 65 views
34

我想創建一個類來處理數組,但我似乎無法得到array_map()在其中工作。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

什麼我做錯了或做這個功能只是沒有在裏面工作類?

+0

的可能重複[傳遞對象法array_map()](http://stackoverflow.com/questions/4546614/passing-object-method-to- array-map) – Gordon 2011-03-24 16:22:28

回答

96

您指定dash作爲錯誤的回調方式。

這不起作用:

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

這並不:

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

閱讀有關不同形式的回調可能會here

+0

感謝您的快速回放。我得到了它的工作,並感謝您的幫助。我只是想知道你是否碰巧有更多關於回調的文章,以及如何正確指定? – Justin 2011-03-24 16:49:34

+0

@Justin:看看這裏:http://stackoverflow.com/questions/48947/how-do-i-implement-a-callback-in-php – Jon 2011-03-24 19:01:47

+0

甚至靜態工作像 array_map(@ [self,'dash ']) – bortunac 2016-06-25 22:53:43

1

它必須讀取

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

array -thing是PHP callback用於對象實例方法。對常規函數的回調被定義爲包含函數名稱('functionName')的簡單字符串,而靜態方法調用被定義爲array('ClassName, 'methodName')或者像這樣的字符串:'ClassName::methodName'(這在PHP 5.2.3起可用)。

+0

謝謝你的回答。你有沒有碰到過關於這個問題的更多文章?再次感謝, – Justin 2011-03-24 17:21:13

2

array_map($this->dash(), $data)使用0參數調用$this->dash(),並使用返回值作爲應用於數組的每個成員的回調函數。您需要改爲array_map(array($this,'dash'), $data)

17

你好,你可以使用這樣一個

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