来自关联PHP数组的Javascript数组/对象顺序

时间:2015-04-26 21:42:15

标签: javascript php ajax json

在我描述这个问题之前,请原谅任何不正确的术语和对象而不是数组的意外引用,反之亦然,我不是完全可以加快速度,而是通过它来完成。

我在PHP中将以下数组保存为会话变量:

{"CategoryF":[],"CategoryA":["Life","There","People","Land","Family"],"CategoryC":["Various"]}

将图像网格中的缩略图拖动到新订单后,它会在javascript中执行一项功能,并使用PHP调用ajax脚本。它目前只检索会话数组的最新版本。稍后将进行必要的步骤以将更新的数组保存回会话变量和数据库:

var sorty = Sortable.create(thumbcontainer, { 
        animation: 250,
        draggable: "img",
        dataIdAttr: 'id',
        onUpdate: function (/**Event*/evt) {
            var orderList = sorty.toArray();
            var catsArray = 
            $.ajax({
                type: 'POST',
                url: 'includes/proc_cats.php',
                dataType: 'json'
            }).done(function(returnedCatsArray) {
                console.log(returnedCatsArray);
            });
            console.log('Dragged. Order is: ' + orderList);
        }
    });

proc_cats.php

<?php
// Access the existing session
session_start();
// $catsArray is a session variable, in the format as above.
$catsArray = json_encode($_SESSION['categoriesPics']);
echo $catsArray;
?>

var orderList 将生成一个字符串,其中每个缩略图的顺序为id,以逗号分隔:'42,35,95,12,57'

控制台将PHP数组显示为javascript数组,但顺序不同。我希望能够将包含订单的字符串插入到数组中并将其保存回数据库中。它将与其相关类别相关联,类似于:

{"CategoryF":[],"CategoryA":["Life":["23,74,47,12,86,83,12"],"There","People","Land","Family"],"CategoryC":["Various"]}

但不能丢失订单,因为网站的其他部分使用array_keys通过索引引用数组。控制台产生:

Object:
   CategoryA:Array[0]
   CategoryC:Array[0]
   CategoryF:Array[5]

我错过了什么吗?我相信整个数组是一个对象而不是一个数组,因为它没有任何索引,而子类别做了,它们被呈现为一个数组。 array_keys中的PHP已经足够简单,可以解决任何索引问题,直到现在PHP网站的其他区域,但是我想知道javascript的解决方案是否存在方面是直截了当的吗?子类目前只有因为我还没有与它们关联和orderList,所以我不会试图回溯并为数组构建一个索引,因为它会变得困难(除非有一个简单的方法来做到这一点我被忽视了。

(这是我一小时前问过的一个问题的更具体版本,我现在因为过于宽泛而删除了。)

2 个答案:

答案 0 :(得分:1)

我相信你会根据术语'关联数组'和'数组'轻微混淆。 php关联数组对应于javascript对象。应该类似于$ catsArray访问returnedCatsArray。即。用钥匙。如果其中一个键返回一个实际数组,则可以将其编入索引。

php array_keys将是javascript中的Object.keys(returnedCatsArray)。

答案 1 :(得分:0)

从进一步的研究来看,这似乎是不可行的。因此,最好的方法是在我的类别数组旁边提供一个订单数组。

如果我添加以下附加代码:

$parentCatOrder = array_keys($catsArray);

在我的 proc_cats.php 脚本中,我有一种简洁的方法,每次都可以动态生成原始数组的索引引用。这会生成一个类似于:

的数组
$parentCatOrder = {'categoryF', 'categoryA', 'categoryC'};

有一个我可以参考的索引来保持其顺序。因此$parentCatOrder[2]将始终生成'categoryC',除非我自己更改了数组。

然后我使用以下命令将两个数组返回到javascript:

$return_data['catsarray'] = $catsArray;
$return_data['parentcatsorder'] = $parentCatOrder;
// Encode it back into a JSON object before sending
echo json_encode($return_data);

在javascript中,如果我使用的索引为returnedCatsArray.catsarray[returnedCatsArray.parentcatsorder[1]][3],我可以引用1-3并保证这会为每个用户产生相同的结果,除非用户已更改该数组。