Использовать строку массива в качестве ключа массива - PullRequest
0 голосов
/ 17 октября 2019

У меня есть массив. после 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 ]

9 голосов
/ 17 октября 2019

Вы можете использовать

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

array_column - Возвращать значения из одного столбца во входном массиве

Примечание:
column_key Столбец значений для возврата. Это значение может быть целочисленным ключом столбца, который вы хотите получить, или это может быть имя строкового ключа для ассоциативного массива или имени свойства. Также может быть NULL для возврата полных массивов или объектов (это полезно вместе с index_key для переиндексации массива).

В случаеу вас нет поддержки array_column. Пожалуйста, смотрите ссылка .

Демо

Выход

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

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

)
1 голос
/ 17 октября 2019

array_column - это то, что вы ищете,

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

1 голос
/ 17 октября 2019

Вам нужно только перебрать массив и заменить ключ на нужный ключ.

$newArray = array();
for($i=0;$i<count($array);$i++){
    $newArray[$array[$i]['groupid']] = $array[$i];
}
var_dump($array);
0 голосов
/ 17 октября 2019

Вы можете использовать array_reduce для операций такого типа ( песочница ):

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

)
0 голосов
/ 17 октября 2019

Использование array_walk

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

Рабочий пример: https://3v4l.org/rB0UT

...