[英]Passing array to a function inside class PHP
我有一個關於如何在 PHP 中將數組傳遞給函數的問題。 我有一個名為“MyClass”的類,其中包含名為rankVal($arr1, $arr2)
和processResponse($data, $db, $id, $lat, $lng)
函數。
processResponse() 將調用 rankVal(),這是我的問題。
class MyClass{
private function cmpVal($a, $b){
/*do sorting stuff*/
}
function rankVal($arr1, $arr2){
$arrIdx=[];
foreach ($arr1 as $key => $value) {
$n=array_search($value, $arr2);
$newPos = ($key+$n)/2;
$arrNewIdx [$n]=round($newPos,0, PHP_ROUND_HALF_DOWN);
}
}
function processResponse($data, $db, $id, $lat, $lng){
//Do some stuffs here...
$someArr1 = [];
foreach($results as $key => $value){
$newVal = new stdClass();
$newVal->key1 = $value->key1;
$newVal->key2 = $value->key2;
$newVal->key3 = $value->key3;
$newVal->key4 = $value->key4;
$newVal->key5 = $value->key5;
$someArr1 []= $newVal;
}
$someArr2 = $someArr1;
usort($someArr2, array($this, "cmpVal"));
$rankedVal = $this->rankVal($someArr1, $someArr2);
}
}
當我調用 processResponse() 函數時,我收到了這個錯誤: array_search() expects parameter 2 to be array, object given
所以,我在rankVal()
var_dump($arr2)
,輸出清楚地表明 $arr2 是一個數組。 這是var_dump($arr2)
的示例輸出:
array(30) {
[0]=>
object(stdClass)#385 (7) {
["key1"]=>
string(24) "something"
["key2"]=>
string(20) "something"
["key3"]=>
string(41) "something"
["key4"]=>
float(1.23455)
["key5"]=>
float(1.19128371983198)
}
我做錯了什么? 我試圖通過在rankVal(&$arr1, &$arr2)
添加 "&" 來通過引用傳遞數組,但錯誤仍然存在。
要添加到此處的另一個答案(現在似乎已經消失),如果您希望您的類在適當的情況下表現為數組,則需要使其可迭代。
您需要做的就是實現Iterable 。 這意味着您需要創建必要的方法,但這就是讓您的類以這種方式運行所需的全部內容。
它對於旨在保存數據數組的類很有用,但您希望將其他工具與該數據一起封裝。
這是一個例子:
class Row implements \Iterator {
protected $data;
protected $position = 0;
public function __construct( array $data = [ ]) {
$this->data = $data;
}
public function addData( $value ) {
$this->data[] = $value;
}
public function replaceData( $index, $value ) {
$this->data[ $index ] = $value;
}
public function getData() {
return $this->data;
}
public function setData( array $data ) {
$this->data = $data;
return $this;
}
/** Required by Iterator */
public function current() {
return $this->data[ $this->position ];
}
/** Required by Iterator */
public function next() {
++$this->position;
}
public function __toArray() {
return $this->data;
}
/** Required by Iterator */
public function key() {
return $this->position;
}
/** Required by Iterator */
public function valid( $index = null ) {
return isset( $this->data[ $index ? $index : $this->position ] );
}
/** Required by Iterator */
public function rewind() {
$this->position = 0;
}
public function count() {
return count( $this->data );
}
}
一旦有了它,就可以在任何可以使用數組的地方使用它。
所以在再次檢查我的代碼后,我終於找到了導致這個不應該存在的奇怪錯誤的問題。
罪魁禍首是在rankVal()
其中I調用的函數usort()
其用於rankVal()
作為用於分類處理的回調函數。 然后,我把這個回調函數改成了正確的,瞧,問題就解決了。
感謝所有回答並給我一些有關如何修復它的建議的人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.