Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制PHP保持数组索引的定义顺序?_Php_Arrays - Fatal编程技术网

强制PHP保持数组索引的定义顺序?

强制PHP保持数组索引的定义顺序?,php,arrays,Php,Arrays,我试着聪明一点,返回我需要的所有信息,以排序和显示应用程序用户的朋友以及他们所属的用户定义组。重要的是要先让他们保持团体秩序,然后再让朋友秩序。到目前为止,我有一个非常有效的查询: SELECT * FROM friends left join `groups` on `groups`.id = friends.group_id where `friends`.user_id = 1 ORDE

我试着聪明一点,返回我需要的所有信息,以排序和显示应用程序用户的朋友以及他们所属的用户定义组。重要的是要先让他们保持团体秩序,然后再让朋友秩序。到目前为止,我有一个非常有效的查询:

SELECT * FROM friends 
            left join `groups` 
            on `groups`.id = friends.group_id 
            where `friends`.user_id = 1 
            ORDER BY `groups`.priority ASC, friends.priority ASC 
它返回的信息与我预期的完全一样,对于好友不在组中的组信息,为空。为此,我有一个catchall(保留组名)“friends”组,并将其排序为几个数组,以供以后的用户使用,如下所示:

        foreach ($rows as $group_friend) {
            // group id or keyword "friends" if null
            $group_id = ($group_friend['group_id']?:'friends');
            // Do it this way to prevent duplicates AND make it accessible by either index or value
            $user['groups'][$group_id] = $group_id;
            $user['friends'][] = $group_friend['friend_id'];
            $user['group_friends'][$group_id][] = $group_friend['friend_id'];
        }
查询在后端php页面上运行,该页面通过来自前端的JSON格式的CURL请求访问。当我加载backend.php?get_user=1页面时,我看到了用户数据,但组内容出现了问题:

groups  
    23  "23"
    24  "24"
    25  "25"
    friends "friends"
friends 
    0   "8"
    1   "9"
    2   "16"
    3   "2"
    4   "12"
    5   "20"
    6   "97"
    7   "98"
    8   "3"
    9   "4"
    10  "99"
    11  "100"
    12  "129"
    13  "17"
    14  "18"
    15  "165"
group_friends   
    23  
        0   "3"
        1   "4"
        2   "99"
        3   "100"
        4   "129"
    24  
        0   "2"
        1   "12"
        2   "20"
        3   "97"
        4   "98"
    25  
        0   "17"
        1   "18"
        2   "165"
    friends 
        0   "8"
        1   "9"
        2   "16"
秩序在很大程度上得到了维持,但第24组的优先级高于第23组,因此应该排在第一位。当我输出查询结果时,它正确地显示了23之前的所有24个组数据,但它最终在结果数组中翻转(两个)。除了写一个数字索引来强制排序,我还能做什么


我考虑将组的索引设置为优先级,但优先级是可选字段,可以有重复项(null)。

黑客:在组id前面加上
组-
,这样PHP就不会假定它是数字数组索引;解决方案是:使用正确的序列保留一个单独的数组,并在该数组上迭代以获得正确顺序的组;PHP将根据您在数组中输入值的方式保留排序,因此如果将
24
作为键放在第一位,那么它也将首先出现。请参阅示例:24肯定在第一位,因为查询结果按顺序返回。我通过直接转储sql结果来验证它。尽管现在我将其作为JSON转储时结果数组出现了问题,但使用文本键似乎确实有效。似乎没有必要,但显然有一些恶作剧在起作用。黑客:在组id前面加上
group-
,这样PHP就不会假设它是一个数字数组索引;解决方案是:使用正确的序列保留一个单独的数组,并在该数组上迭代以获得正确顺序的组;PHP将根据您在数组中输入值的方式保留排序,因此如果将
24
作为键放在第一位,那么它也将首先出现。请参阅示例:24肯定在第一位,因为查询结果按顺序返回。我通过直接转储sql结果来验证它。尽管现在我将其作为JSON转储时结果数组出现了问题,但使用文本键似乎确实有效。似乎没有必要,但显然有一些恶作剧在起作用。