簡體   English   中英

將數組傳遞給類 PHP 中的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM