我有以下数组
Array
(
[0] => Array
(
[section_name] => phone_calls
[0] => phone_calls
[permission_key] => can_delete
[1] => can_delete
[requirment] => 000000000100000
[2] => 000000000100000
)
[1] => Array
(
[section_name] => phone_calls
[0] => phone_calls
[permission_key] => can_insert
[1] => can_insert
[requirment] => 000000000001000
[2] => 000000000001000
)
[2] => Array
(
[section_name] => phone_calls
[0] => phone_calls
[permission_key] => can_purge
[1] => can_purge
[requirment] => 000000000010000
[2] => 000000000010000
)
[3] => Array
(
[section_name] => phone_calls
[0] => phone_calls
[permission_key] => can_update
[1] => can_update
[requirment] => 000000000000100
[2] => 000000000000100
)
[4] => Array
(
[section_name] => accounts
[0] => phone_calls
[permission_key] => can_use
[1] => can_use
[requirment] => 000000000000001
[2] => 000000000000001
)
[5] => Array
(
[section_name] => accounts
[0] => phone_calls
[permission_key] => can_view
[1] => can_view
[requirment] => 000000000000010
[2] => 000000000000010
)
)
我希望它看起来像这样
Array
(
[phone_calls] => Array
(
[can_update] => 4
[can_insert] => 8
[can_purge] => 16
[can_delete] => 32
)
[accounts] => Array
(
[can_use] => 1
[can_view] => 2
)
)
这里的公因子是“section_name”的值,只要“secton_name”与permission_key相同,并且要求进入同一个存储桶。
在此示例中,有2个不同的section_name(即.phone_calls,accounts),因此最终数组应该有2个键(即.phone_calls,accounts)
这是我到目前为止所尝试的内容
$rules = getSystemRules();
$rulesTotal = count($rules);
$finalArray = array();
$subArray = array();
for($i=0; $i < $rulesTotal; ++$i){
$row = $rules[$i];
/** if section_name = the previous section_name then put the the "permission_key" and the "requirment"
* in the same array $subArray. Else take the $subArray and put it into a new array called $finalArray
* and make they key for the $finalArray the section_name
*/
if($i == 0 || ($i > 0 && $row['section_name'] == $rules[$i-1]['section_name'])){
$subArray[$row['permission_key']] = bindec($row['requirment']);
} else {
$finalArray[$rules[$i-1]['section_name']][] = $subArray;
$subArray = array();
$subArray[$row['permission_key']] = bindec($row['requirment']);
}
}
print_r($finalArray);
这是我用来获取$rules
数组
SELECT SQL_CACHE section_name, permission_key, requirement
FROM permission_rules
ORDER BY section_name
但是这段代码没有像我期望的那样工作。 $finalArray
始终为空
答案 0 :(得分:0)
可能是这样的:
foreach($rules as $rule) {
$result[$rule['section_name']][$rule['permission_key']] = bindec($rule['requirement']);
}
鉴于阵列,你也可以使用$rule[0]
等......