Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 修改对象中的数据_Php_Object - Fatal编程技术网

Php 修改对象中的数据

Php 修改对象中的数据,php,object,Php,Object,我有以下功能: 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']

我有以下功能:

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->data
是一个数组,其中包含表示SQL查询返回的字段行的数组。此函数的目的是通过减少指定行的行数并增加原来位于其上方的行的行数,按顺序上移指定行

不幸的是,事情似乎并没有按计划进行!对象中的行号似乎没有更新。在查看其他线程时,我看到有人建议使用&operator来专门引用变量,而不是它的副本,但正如您在我的代码中看到的那样,我已经这样做了,并且没有太多的运气(或者可能我做错了!)

我也试过这样的台词:

$row -> row_nr++;

$row -> row_nr--;
正如我在这里发布的一些示例中所看到的,但在那里也没有运气


有人对为什么对象中的数据数组没有正确更新有什么建议吗?

在PHP中,函数获取数组的副本

或者

a) 返回新数组

b)
函数上移(&$row\u nr){


通过引用传递数组。

这与当前的问题无关,问题是对象本身:
$this
没有被传递。在我看来,函数是一个成员函数,所以通过引用传递参数没有任何作用,事实上调用一个期望引用的方法会在这样调用:
$instance->moveUp(2);
但是数组正在被修改,在函数完成时丢失。是的,但是数组不是传递给方法的,数组是
$this->data
,而不是
$rown\u nr
,它只是一个int:
$other\u row=($row\u nr-1);
不能与数组一起使用它确实是一个成员函数。需要澄清的是,$row\u nr参数是一个int,用于在数组中查找正确的行。它不是对象中的变量。@user1540332:Wayne给了你答案:他的take不需要你处理引用,因为它访问数据数组(我认为这是一笔财产)直接。如果这不适合你,你必须提供更多的信息。还要添加一些var_转储、回音和其他内容,看看函数内部发生了什么。另外:还有一个提示:明确指定私有/公共/受保护的访问是一个好习惯,而不是暗示公共访问。这样,试着将你的警告级别设置为
E_严格的| E_ALL
这就完成了工作!谢谢!尽管在实际执行此操作时,我意识到仅仅切换行nrs并不能解决问题,我需要交换数据数组中的两行,但我相信我可以处理。Wayne似乎给了你一个可接受的答案。你应该使用绿色复选框nex标记它他没有回答这个问题,所以他可以得到表扬。
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']--;
            }
        }
    }