Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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,我在谷歌上搜索,发现数组键只按索引更改。但我想要的是分组。 示例数组中有3个组。 1.出席 2.主要群体和 3.大师 我的意见是这样的 array( (int) 12 => 'Attendances', (int) 15 => '_master_add', (int) 16 => '_master_full_month', (int) 17 => '_master_edit_grade', (int) 18 => '_mast

我在谷歌上搜索,发现数组键只按索引更改。但我想要的是分组。 示例数组中有3个组。 1.出席 2.主要群体和 3.大师

我的意见是这样的

array(
    (int) 12 => 'Attendances',
    (int) 15 => '_master_add',
    (int) 16 => '_master_full_month',
    (int) 17 => '_master_edit_grade',
    (int) 18 => '_master_edit',
    (int) 19 => '_master_delete',
    (int) 20 => '_master_upload_csv',
    (int) 36 => 'MainGroups',
    (int) 39 => '_master_add',
    (int) 40 => '_master_edit',
    (int) 41 => '_master_delete',
    (int) 43 => 'Masters',
    (int) 46 => '_master_add',
    (int) 47 => '_master_edit',
    (int) 48 => '_master_delete',
    (int) 52 => '_master_stop'
)
我想要的输出是 1.出席 2.大师和 3.主要群体

array(
    (int) 12 => 'Attendances',
    (int) 15 => '_master_add',
    (int) 16 => '_master_full_month',
    (int) 17 => '_master_edit_grade',
    (int) 18 => '_master_edit',
    (int) 19 => '_master_delete',
    (int) 20 => '_master_upload_csv',
    (int) 43 => 'Masters',
    (int) 46 => '_master_add',
    (int) 47 => '_master_edit',
    (int) 48 => '_master_delete',
    (int) 52 => '_master_stop'
    (int) 36 => 'MainGroups',
    (int) 39 => '_master_add',
    (int) 40 => '_master_edit',
    (int) 41 => '_master_delete',
)

没有小组。也许您看到它们是因为您知道这些值的含义,php只将一组数字视为附加了值的键

我认为有两种方法可以解决你的问题

  • 创建一个数组,该数组包含“组”引用的键的编号:

    $keys=array(

    “出席人数”=>阵列(15,161718,19,20),

    'Masters'=>阵列(46,47,48,52),

    'MainGroups'=>数组(39,40,41)

    );

  • 现在,您可以通过调用

    $myarray['attentations'[0]]
    (对于$myarray[15]==>“\u master\u add”)

    仅当钥匙始终相同时,此功能才起作用

    第二种选择是重新购买阵列,使其真正包含组:

    array(
        'Attendances'= array(
            (int) 1 => '_master_add',
            (int) 2 => '_master_full_month',
            (int) 3 => '_master_edit_grade',
            (int) 4 => '_master_edit',
            (int) 5 => '_master_delete',
            (int) 6 => '_master_upload_csv'
        ),
        'MainGroups'=>array(
           (int) 1 => '_master_add',
           (int) 2 => '_master_edit',
           (int) 3 => '_master_delete',
           (int) 4 => 'Masters',
           (int) 5 => '_master_add',
           (int) 6 => '_master_edit',
           (int) 7 => '_master_delete',
           (int) 8 => '_master_stop'
        ),
       'Masters'=>array(
           (int) 1 => '_master_add',
           (int) 2 => '_master_edit',
           (int) 3 => '_master_delete',
           (int) 4 => '_master_stop'
       )
    );
    
    在这种情况下,您可以调用“\u master\u add”的
    $myarray['attentations[1]”]

    编辑 在阅读您的评论后,以下内容可能会起作用。它提供了所需的输出。但是循环此数组只能使用
    foreach
    来保持顺序

    编辑2 添加了对“组名”键的搜索,因此您可以在不知道键的情况下创建订单数组

    $my_array=array(... see above...);
    $key1=array_search('Attendances',$my_array);
    $key2=array_search('MainGroups',$my_array);
    $key3=array_search('Masters',$my_array);
    
    foreach($my_array as $k=>$v){
        if($k >= $key1 && $k<$key2){
            $group_1[]=$k;
            }
        elseif($k >= $key2 && $k<$key3){
            $group_2[]=$k;
            }
        else{
            $group_3[]=$k;
            }
        }
    
    $order=array_merge($group_1,$group_3,$group_2);    
    $new_array=array();
    
    foreach($order as $key => $value){
        $new_array[$value]=$my_array[$value];
        }
    
    echo '<pre>'.print_r($new_array,true).'<pre>';
    
    $my_array=array(…见上文…);
    $key1=数组搜索($ATTINGS',$my\U数组);
    $key2=数组搜索('MainGroups',$my\u数组);
    $key3=数组搜索($Masters',$my\U数组);
    foreach($k=>v的my_数组){
    如果($k>=$key1&&$k=$key2&&$k$value){
    $new_数组[$value]=$my_数组[$value];
    }
    回显“”。打印($new\u数组,true)。“”;
    
    没有组。可能您看到它们是因为您知道值的含义,php只将一组数字视为附加了值的键

    我认为有两种方法可以解决你的问题

  • 创建一个数组,该数组包含“组”引用的键的编号:

    $keys=array(

    “出席人数”=>阵列(15,161718,19,20),

    'Masters'=>阵列(46,47,48,52),

    'MainGroups'=>数组(39,40,41)

    );

  • 现在,您可以通过调用

    $myarray['attentations'[0]]
    (对于$myarray[15]==>“\u master\u add”)

    仅当钥匙始终相同时,此功能才起作用

    第二种选择是重新购买阵列,使其真正包含组:

    array(
        'Attendances'= array(
            (int) 1 => '_master_add',
            (int) 2 => '_master_full_month',
            (int) 3 => '_master_edit_grade',
            (int) 4 => '_master_edit',
            (int) 5 => '_master_delete',
            (int) 6 => '_master_upload_csv'
        ),
        'MainGroups'=>array(
           (int) 1 => '_master_add',
           (int) 2 => '_master_edit',
           (int) 3 => '_master_delete',
           (int) 4 => 'Masters',
           (int) 5 => '_master_add',
           (int) 6 => '_master_edit',
           (int) 7 => '_master_delete',
           (int) 8 => '_master_stop'
        ),
       'Masters'=>array(
           (int) 1 => '_master_add',
           (int) 2 => '_master_edit',
           (int) 3 => '_master_delete',
           (int) 4 => '_master_stop'
       )
    );
    
    在这种情况下,您可以调用“\u master\u add”的
    $myarray['attentations[1]”]

    编辑 在阅读您的评论后,以下内容可能会起作用。它提供了所需的输出。但是循环此数组只能使用
    foreach
    来保持顺序

    编辑2 添加了对“组名”键的搜索,因此您可以在不知道键的情况下创建订单数组

    $my_array=array(... see above...);
    $key1=array_search('Attendances',$my_array);
    $key2=array_search('MainGroups',$my_array);
    $key3=array_search('Masters',$my_array);
    
    foreach($my_array as $k=>$v){
        if($k >= $key1 && $k<$key2){
            $group_1[]=$k;
            }
        elseif($k >= $key2 && $k<$key3){
            $group_2[]=$k;
            }
        else{
            $group_3[]=$k;
            }
        }
    
    $order=array_merge($group_1,$group_3,$group_2);    
    $new_array=array();
    
    foreach($order as $key => $value){
        $new_array[$value]=$my_array[$value];
        }
    
    echo '<pre>'.print_r($new_array,true).'<pre>';
    
    $my_array=array(…见上文…);
    $key1=数组搜索($ATTINGS',$my\U数组);
    $key2=数组搜索('MainGroups',$my\u数组);
    $key3=数组搜索($Masters',$my\U数组);
    foreach($k=>v的my_数组){
    如果($k>=$key1&&$k=$key2&&$k$value){
    $new_数组[$value]=$my_数组[$value];
    }
    回显“”。打印($new\u数组,true)。“”;
    
    最后,我通过双循环和使用新数组而不是在输入数组中修改得到了它

    最后,我通过双循环和使用新数组而不是在输入数组中修改得到了它


    是否要按自定义顺序重新排列阵列?是否需要将单个阵列按(出席、主控、主组)排列为二维阵列?@RomanPerekhrest是的,我想按自定义顺序重新排列数组。Mani,我只需要单个数组,不需要维度数组。你想按自定义顺序重新排列数组吗?你需要按单个数组到二维数组(出席者、大师、主要群组)排列吗?@RomanPerekhrest是的,我想按自定义顺序重新排列数组。Mani,我只需要单个数组,不需要维度数组。Michel,谢谢你的回答。但很抱歉,我无法更改我的输入,我想要问题中描述的输出。因为这是cakephp的ACL(访问控制列表)身份验证和更改输入对我来说是不可能的。嗨,Michel,非常感谢你的回答。但我仍然没有指出我得到的数组来自数据库,索引是表的id,所以我不知道可能得到哪个索引。我只能依赖数组值,而不是数组索引。因此,首先我想我必须编写如何根据值了解组。然后如何更改顺序。但仍然无法思考如何更改顺序。啊,没有得到。a
    array\u search()
    对于所有的“组名”可能会起到作用。如果你有这些键,你可以用所需的键顺序构造一个数组。Michel,谢谢你的回答。但很抱歉,我不能更改输入,我想要问题中描述的输出。因为这是cakephp的ACL(访问控制列表)身份验证和更改输入对我来说是不可能的。嗨,Michel,非常感谢你的回答。但我仍然没有指出我得到的数组来自数据库,索引是表的id,所以我不知道可能得到哪个索引。我只能依赖数组值,而不是数组索引。因此,首先我想我必须编写如何根据值了解组。然后如何更改顺序。但仍然无法思考如何更改顺序。啊,没有得到答案。对所有“组名”进行
    array\u search()
    搜索可能会奏效。如果你有这些键,你可以用所需的键顺序构造一个数组。