Задать вопрос
@pritchin_maxim1
Начинающий IT-Разработчик

Как отсортировать массив?

Есть массив, Как изменить порядок ключей и значений на
'gq_hostname', 'gq_address', 'gq_port_client', 'gq_online', 'gq_numplayers', 'gq_maxplayers'
array:2 [▼
  1 => array:6 [▼
    "gq_address" => "188.120.254.140"
    "gq_hostname" => "•   RGPlay | DarkRP [Быстрая загрузка]"
    "gq_maxplayers" => 128
    "gq_numplayers" => 0
    "gq_online" => true
    "gq_port_client" => 27015
  ]
  2 => array:6 [▼
    "gq_address" => "62.109.18.242"
    "gq_hostname" => "Default Breach Server"
    "gq_maxplayers" => 128
    "gq_numplayers" => 0
    "gq_online" => true
    "gq_port_client" => 27015
  ]
]
  • Вопрос задан
  • 91 просмотр
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
В ассоциативном массиве PHP порядок всегда соответствует последовательности добавления в него ключей.
$array = [
  [
    "gq_address" => "188.120.254.140",
    "gq_hostname" => "•   RGPlay | DarkRP [Быстрая загрузка]",
    "gq_maxplayers" => 128,
    "gq_numplayers" => 0,
    "gq_online" => true,
    "gq_port_client" => 27015,
  ], [
    "gq_address" => "62.109.18.242",
    "gq_hostname" => "Default Breach Server",
    "gq_maxplayers" => 128,
    "gq_numplayers" => 0,
    "gq_online" => true,
    "gq_port_client" => 27015,
  ]
];
$array = array_map(function($el) {
  return [
    'gq_hostname' => $el['gq_hostname'],
    'gq_address' => $el['gq_address'],
    'gq_port_client' => $el['gq_port_client'],
    'gq_online' => $el['gq_online'],
    'gq_numplayers' => $el['gq_numplayers'],
    'gq_maxplayers' => $el['gq_maxplayers']
  ];
}, $array);
var_dump($array);

array(2) {
  [0] => array(6) {
    ["gq_hostname"] => string(55) "•   RGPlay | DarkRP [Быстрая загрузка]"
    ["gq_address"] => string(15) "188.120.254.140"
    ["gq_port_client"] => int(27015)
    ["gq_online"] => bool(true)
    ["gq_numplayers"] => int(0)
    ["gq_maxplayers"] => int(128)
  }
  [1] => array(6) {
    ["gq_hostname"] => string(21) "Default Breach Server"
    ["gq_address"] => string(13) "62.109.18.242"
    ["gq_port_client"] => int(27015)
    ["gq_online"] => bool(true)
    ["gq_numplayers"] => int(0)
    ["gq_maxplayers"] => int(128)
  }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Функция uksort()

// Берем входящий массив:
$input = [
  [
	  'gq_address'     => '188.120.254.140',
	  'gq_hostname'    => '•   RGPlay | DarkRP [Быстрая загрузка]',
	  'gq_maxplayers'  => 128,
	  'gq_numplayers'  => 0,
	  'gq_online'      => true,
	  'gq_port_client' => 27015,
  ],
  [
	  'gq_address'     => '62.109.18.242',
	  'gq_hostname'    => 'Default Breach Server',
	  'gq_maxplayers'  => 128,
	  'gq_numplayers'  => 0,
	  'gq_online'      => true,
	  'gq_port_client' => 27015,
  ],
];

// Определяем желаемый порядок ключей:
$order = [
	'gq_hostname',
	'gq_address',
	'gq_port_client',
	'gq_online',
	'gq_numplayers',
	'gq_maxplayers',
];

// Перебираем элементы входящего массива и сортируем их по ключам:
$output = array_map( function($array) use ($order)
{
        // Эта функция сортирует по ключам
	uksort( $array, function($a, $b) use ($order)
	{
		$a_desired_position = array_search($a, $order, true);
		$b_desired_position = array_search($b, $order, true);

                // Вот тут вся магия:
                // нужно вернуть отрицательное число, 0 или положительное число, 
                // в зависимости от положения одного элемента относительно другого.
		return $a_desired_position - $b_desired_position;
	} );

	return $array;
}, $input );

var_dump($input);
var_dump($output);


Вот что мы получаем в итоге:

// Входящий массив:
array:2 [▼
  0 => array:6 [▼
    "gq_address" => "188.120.254.140"
    "gq_hostname" => "•   RGPlay | DarkRP [Быстрая загрузка]"
    "gq_maxplayers" => 128
    "gq_numplayers" => 0
    "gq_online" => true
    "gq_port_client" => 27015
  ]
  1 => array:6 [▼
    "gq_address" => "62.109.18.242"
    "gq_hostname" => "Default Breach Server"
    "gq_maxplayers" => 128
    "gq_numplayers" => 0
    "gq_online" => true
    "gq_port_client" => 27015
  ]
]
// Отсортированный массив:
array:2 [▼
  0 => array:6 [▼
    "gq_hostname" => "•   RGPlay | DarkRP [Быстрая загрузка]"
    "gq_address" => "188.120.254.140"
    "gq_port_client" => 27015
    "gq_online" => true
    "gq_numplayers" => 0
    "gq_maxplayers" => 128
  ]
  1 => array:6 [▼
    "gq_hostname" => "Default Breach Server"
    "gq_address" => "62.109.18.242"
    "gq_port_client" => 27015
    "gq_online" => true
    "gq_numplayers" => 0
    "gq_maxplayers" => 128
  ]
]


Вывод: учите матчасть.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы