这是一个简单的编程问题,来自于我对PHP如何在foreach循环中处理数组复制和取消设置缺乏了解.就像这样,我有一个阵列从我想要改变的外部源格式来找我.一个简单的例子是:
$myData = array('Key1' => array('value1', 'value2'));
Run Code Online (Sandbox Code Playgroud)
但我想要的是:
$myData = array([0] => array('MyKey' => array('Key1' => array('value1', 'value2'))));
Run Code Online (Sandbox Code Playgroud)
所以我采取第一个$myData并将其格式化为第二个$myData.我的格式化算法完全没问题.我的问题在于找到一种节省内存的方法,因为这些数组可能会有点笨拙.因此,在我的foreach循环中,我将当前数组值复制到新格式,然后我从原始数组中取消设置我正在使用的值.例如:
$formattedData = array();
foreach ($myData as $key => $val) {
// do some formatting here, copy to $reformattedVal
$formattedData[] = $reformattedVal;
unset($myData[$key]);
}
Run Code Online (Sandbox Code Playgroud)
这是unset()一个好主意吗?即,它是否节省了内存,因为我复制了数据并且不再需要原始值?或者,PHP是否自动垃圾收集数据,因为我没有在任何后续代码中引用它?
代码运行正常,到目前为止,我的数据集的大小可以忽略不计,无法测试性能差异.我只是不知道我是否为自己设置了一些奇怪的错误或以后的CPU命中.
感谢您的任何见解.
-sR
在Cake 1.3之前,我会用简单的方法检查ajax请求$ajax->isAjax().既然AjaxHelper已经弃用了,我正在寻找在我的视图中检查ajax请求的正确方法.我在JsHelper或HtmlHelper方法中找不到任何东西.这似乎是一件非常简单的事情,我希望我不会错过一些明显的东西!
顺便说一句,我知道RequestHandler组件($this->RequestHandler->isAjax()在控制器中),但我再次寻求有关如何在我的视图中进行ajax检测的帮助.
谢谢.