2014-12-04 38 views
0

我有以下阵列如何通过comon值组合数组?

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,帐户),以便最终的阵列应具有2个键(即phone_calls,帐户)

这是我迄今尝试

$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

也许你的SQL查询的一个小小的变化可能会给你一个更接近你想要的格式 – 2014-12-04 00:13:58

回答

0

大概是这样的:

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

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

+0

谢谢。有效 :) – Jaylen 2014-12-04 00:38:46