0

私は次の機能を持っています:

function moveUp($row_nr){
        $other_row = ($row_nr - 1);
        foreach ($this -> data as &$row){
            if ($row['row_nr'] == $other_row){
                $row['row_nr']++;
            }
            else if ($row['row_nr'] == $row_nr){
                $row['row_nr']--;
            }
        }
    }

$this -> dataSQL クエリによって返されるフィールドの行を表す配列を含む配列です。この関数の目的は、row_nr をデクリメントし、元々その上にあった行の row_nr をインクリメントすることによって、指定された行を順序で上に移動することです。

残念ながら、物事は計画通りにはいかないようです!オブジェクトでrow_nrが更新されていないようです。他のスレッドを見ると、 & 演算子を使用して、変数のコピーではなく変数を具体的に参照することを提案している人々を見てきましたが、私のコードでわかるように、私はそれを実行しましたが、あまりうまくいきませんでした(または、おそらく私はそれを間違っています!)。

私も次の行を試しました:

$row -> row_nr++;

$row -> row_nr--;

ここに投稿されたいくつかの例で見たように、運もありません。

オブジェクトのデータ配列が正しく更新されていないように見える理由について、何か提案はありますか?

4

2 に答える 2

1

PHP では、関数は配列のコピーを取得します。

また

a) 新しい配列を返す

また

b)function moveUp(&$row_nr){

参照渡しで配列を渡します。

于 2012-09-05T08:44:33.563 に答える
1
function moveUp($row_nr){
        $other_row = ($row_nr - 1);
        foreach ($this -> data as $key => $row){
            if ($row['row_nr'] == $other_row){
                $this->data[$key]['row_nr']++;
            }
            else if ($row['row_nr'] == $row_nr){
                $this->data[$key]['row_nr']--;
            }
        }
    }
于 2012-09-05T08:46:26.597 に答える