【问题标题】:Use array string as array key使用数组字符串作为数组键
【发布时间】:2020-02-14 04:29:53
【问题描述】:

我有一个数组。 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 
  )
)

谢谢。

【问题讨论】:

    标签: php arrays multidimensional-array foreach


    【解决方案1】:

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

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

    【讨论】:

    【解决方案2】:

    使用array_walk

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

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

    【讨论】:

      【解决方案3】:

      array_column 就是你要找的,

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

      【讨论】:

        【解决方案4】:

        你可以使用

        $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
                )
        
        )
        

        【讨论】:

        • 你好,我的php版本是5.2.8,感觉不支持array_column..有没有其他低版本的解决方案
        • 你真好。
        【解决方案5】:

        您可以使用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
                )
        
        )
        

        【讨论】:

        • 这可能行得通,但不是最有意义的……该函数的目的是将数组简化为 single 值。从逻辑上讲,按照不同答案中的建议使用 array_walk 更有意义。
        猜你喜欢
        • 1970-01-01
        • 2018-11-09
        • 2016-01-14
        • 2019-03-02
        • 2012-10-03
        • 1970-01-01
        • 1970-01-01
        • 2017-01-20
        • 1970-01-01
        相关资源
        最近更新 更多