Php 数组\u移位导致我丢失存储在$\u会话中的数组中的元素

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

更新-我没有发现问题。我假设删除他们评论的人是对的,并且Asset.php或array_shift()被调用了两次。我确实在另一个文件中找到了一个最佳点,该文件处理表单对象,并允许我在不删除额外元素的情况下按预期操作数组。留着这个,以防有人想浏览


我有一个由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);