相关疑难解决方法(0)

754
推荐指数
22
解决办法
55万
查看次数

存储PHP数组的首选方法(json_encode vs serialize)

我需要在平面文件中存储多维关联数据数组以用于缓存目的.我偶尔会遇到将其转换为JSON以便在我的Web应用程序中使用的需要,但绝大多数时候我将直接在PHP中使用该数组.

将数组作为JSON或PHP序列化数组存储在此文本文件中会更有效吗?我环顾四周,似乎在最新版本的PHP(5.3)中,json_decode实际上比它更快unserialize.

我目前倾向于将数组存储为JSON,因为我觉得如果有必要,人们可以更容易地阅读它,它可以在PHP和JavaScript中轻松使用,而且从我读过的,它甚至可能是更快解码(不确定编码).

有谁知道任何陷阱?任何人都有良好的基准来展示这两种方法的性能优势?

php arrays performance serialization json

590
推荐指数
12
解决办法
18万
查看次数

PHP数组引用的深层副本

所以$ array是一个数组,其中所有元素都是引用.

我想将这个数组追加到另一个名为$ results的数组(在循环中),但由于它们是引用,PHP复制引用,$ results充满了相同的元素.

到目前为止,最佳工作解决方案是:

$results[] = unserialize(serialize($array));
Run Code Online (Sandbox Code Playgroud)

我担心这会非常低效.有一个更好的方法吗?

php deep-copy

17
推荐指数
1
解决办法
8578
查看次数

php按值复制数组元素,而不是通过引用

我有以下代码:

$data['x'] = $this->x->getResults();  

$data['y'] = $data['x'];

//some code here to modify $data['y']
//this causes (undesirably) $data['x] to be modified as well
Run Code Online (Sandbox Code Playgroud)

我猜因为$ data的所有元素都是引用,修改$ data ['y']也会修改$ data ['x'] ..这不是我想要的.我希望$ data ['x']保持不变.有没有办法取消引用这里的元素,以便我可以按值复制元素?

谢谢.

更新:$ this-> x-> getResults(); 返回一个对象数组.所以我可以做类似的事情:$ data ['x'] [0] - > date_create ...

更新:我最近克隆数组的尝试看起来像这样:

   $data['x'] = $this->x->getResults();     
   $data['y'] = $data['y'];
   foreach($data['x'] as $key=>$row) {
       $data['y'][$key]->some_attr = clone $row->some_attr;
   }
Run Code Online (Sandbox Code Playgroud)

我离开这里了吗?我一直得到一个"非对象调用的__clone方法"错误.从阅读响应看来,我最好的选择是迭代每个元素并克隆它(这是我试图用该代码做的事情......).

更新:刚刚解决了!:在foreach循环中我只需要将行更改为:

$data['y'][$key] = clone $row;
Run Code Online (Sandbox Code Playgroud)

它的工作原理!感谢大家的帮助.

php arrays pointers codeigniter

13
推荐指数
3
解决办法
3万
查看次数

PHP解引用数组元素

我有2个阵列.

$result = array();
$row = array();
Run Code Online (Sandbox Code Playgroud)

Row的元素都是引用,并且不断变化.对于每次迭代,$row我想将行的复制到条目$result而不是引用.

我找到了一些解决方案,但它们看起来都很糟糕.

$result[] = unserialize(serialize($row));
$result[] = array_flip(array_flip($row));
Run Code Online (Sandbox Code Playgroud)

上面的两个工作,但似乎是很多不必要和丑陋的代码只是通过值复制引用数组的内容,而不是复制引用本身.

有没有更清洁的方法来实现这一目标?如果不是最有效的方式是什么?

谢谢.

编辑:如下所示,例如:

function dereference($ref) {
    $dref = array();

    foreach ($ref as $key => $value) {
        $dref[$key] = $value;
    }

    return $dref;
}

$result[] = dereference($row);
Run Code Online (Sandbox Code Playgroud)

也有效,但看起来同样丑陋.

php arrays reference dereference

6
推荐指数
1
解决办法
5276
查看次数

PHP中的数组引用混淆

$arr = array(1);
$a = & $arr[0];

$arr2 = $arr;
$arr2[0]++;

echo $arr[0],$arr2[0];

// Output 2,2
Run Code Online (Sandbox Code Playgroud)

你能帮我一下,怎么可能?

php

5
推荐指数
1
解决办法
149
查看次数