在PHP中按组排列数组键位置
我在谷歌上搜索,发现数组键只按索引更改。但我想要的是分组。 示例数组中有3个组。 1.出席 2.主要群体和 3.大师 我的意见是这样的在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
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()
搜索可能会奏效。如果你有这些键,你可以用所需的键顺序构造一个数组。