Php 数组\u移位导致我丢失存储在$\u会话中的数组中的元素
更新-我没有发现问题。我假设删除他们评论的人是对的,并且Asset.php或array_shift()被调用了两次。我确实在另一个文件中找到了一个最佳点,该文件处理表单对象,并允许我在不删除额外元素的情况下按预期操作数组。留着这个,以防有人想浏览Php 数组\u移位导致我丢失存储在$\u会话中的数组中的元素,php,arrays,session,smarty,pear,Php,Arrays,Session,Smarty,Pear,更新-我没有发现问题。我假设删除他们评论的人是对的,并且Asset.php或array_shift()被调用了两次。我确实在另一个文件中找到了一个最佳点,该文件处理表单对象,并允许我在不删除额外元素的情况下按预期操作数组。留着这个,以防有人想浏览 我有一个由Controller.php运行的网站,它根据通过开关运行的GET值显示不同的页面。有关个案如下: case 'pgImportAsset': { require_once FORMS_DIR.'/Asset.php'; $for
我有一个由Controller.php运行的网站,它根据通过开关运行的GET值显示不同的页面。有关个案如下:
case 'pgImportAsset': {
require_once FORMS_DIR.'/Asset.php';
$form = new ImportAssetForm(&$smarty, &$req);
if(!empty($_SESSION['list'])){
$form->processTo(&$smarty, array('pg'=> 'pgImportAsset'));
} else {
$form->processTo(&$smarty, array('pg'=> 'pgListClip'));
}
break;
}
$_SESSION['list']变量是一个数组,用于存储来自上传这些文件的java小程序的文件名字符串。数组完全初始化为
Array
(
[0] => 0.jpg
[1] => 1.jpg
[2] => 2.jpg
[3] => 3.jpg
[4] => 4.jpg
)
等等。这就是奇怪的地方。数组递减的一行在Asset.php中
$this->filename=array_shift($_SESSION['list']);
数组将进入该页的实例中,我将在该行的前后有一个print\r语句。即使数组中包含所有5个元素,也会显示两个print语句
Array
(
[0] => 1.jpg
[1] => 2.jpg
[2] => 3.jpg
[3] => 4.jpg
)
Array
(
[0] => 2.jpg
[1] => 3.jpg
[2] => 4.jpg
)
它变得更奇怪了。在Asset.php中的这一行之后不久,我就有了这一行(我正在使用smarty)
这显示为第一个元素,在本例中为0.jpg。值$this->filename然后被发送到数据库,而不需要任何代码行对其进行修改。最终存储在数据库中的是1.jpg
我完全迷茫了。请帮忙
关于它的更多信息,Asset.php使用了一个名为ImportAssetForm的对象,该对象扩展了PEAR中的QuickForm库以及一些其他库,包括DB和其他库
这不是我最初的代码,我只是负责修改它。PEAR库可能有点过时,但我没有PEAR的知识,无法进入并彻底改造网站。多年来,我在使用session时遇到了类似的问题;) 试试这家伙说的话: 我不知道这内在意味着什么,我只是向自己解释 会话变量更改不够快:)
我遇到的问题是由于代码中的错误检查导致脚本重新加载。因为我不想破坏这一点,所以我将数组的处理移动到了另一个没有执行两次的位置
$smarty->assign('filename',$this->filename);