使用数组字符串作为数组键

时间:2019-10-17 09:35:51

标签: php arrays multidimensional-array foreach

我有一个数组。在print_r($arr)之后,如下所示:

Array ( 
  [0] => Array ( 
      [groupid] => 5 
      [radminid] => 1 
      [type] => system 
      [system] => private 
  ) 
  [1] => Array ( 
      [groupid] => 10 
      [radminid] => 2 
      [type] => system 
      [system] => private 
  )
)

我想将数组key更改为groupid,类似$arr[$arr[groupid]],我尝试了

foreach($array as $key => $value){
    $arr[$value] = $arr[$arr['groupid']];
}

如何使用$arr[groupid]作为$arr键?下面是我需要的。

Array ( 
  [5] => Array ( 
      [groupid] => 5 
      [radminid] => 1 
      [type] => system 
      [system] => private 
  ) 
  [10] => Array ( 
      [groupid] => 10 
      [radminid] => 2 
      [type] => system 
      [system] => private 
  )
)

谢谢。

5 个答案:

答案 0 :(得分:9)

您可以使用

$array = array_column($array, null, 'groupid');

array_column —从输入数组的单个列中返回值

  

注意:
   column_key 要返回的值列。该值可能是   您希望检索的列的整数键,也可以是   关联数组或属性名称的字符串键名称。也可能   为 NULL 以返回完整的数组或对象(这很有用   使用 index_key 重新索引数组)。

如果没有array_column的支持。请参阅link

Demo

输出

Array
(
    [5] => Array
        (
            [groupid] => 5
            [radminid] => 1
            [type] => system
            [system] => private
        )

    [10] => Array
        (
            [groupid] => 10
            [radminid] => 2
            [type] => system
            [system] => private
        )

)

答案 1 :(得分:1)

您只需要遍历数组并将密钥替换为所需密钥。

$newArray = array();
for($i=0;$i<count($array);$i++){
    $newArray[$array[$i]['groupid']] = $array[$i];
}
var_dump($array);

答案 2 :(得分:1)

array_column是您要寻找的,

$array = array_column($array,null,"groupid");

答案 3 :(得分:0)

使用array_walk

 array_walk($a, function($v) use(&$r){$r[$v['groupid']] = $v;});

工作示例:https://3v4l.org/rB0UT

答案 4 :(得分:0)

您可以使用array_reduce进行此类操作(sandbox):

$array = array_reduce($array, function ($accu, $curr) {
    $accu[$curr['groupid']] = $curr;
    return $accu;
}, []);

输出:

Array
(
    [5] => Array
        (
            [groupid] => 5
            [radminid] => 1
            [type] => system
            [system] => private
        )

    [10] => Array
        (
            [groupid] => 10
            [radminid] => 2
            [type] => system
            [system] => private
        )

)