如何通过共同的值组合数组?

时间:2014-12-04 00:11:03

标签: php arrays

我有以下数组

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始终为空

1 个答案:

答案 0 :(得分:0)

可能是这样的:

foreach($rules as $rule) {
    $result[$rule['section_name']][$rule['permission_key']] = bindec($rule['requirement']);
}

鉴于阵列,你也可以使用$rule[0]等......