ILoveYAnny
@ILoveYAnny

Как отсортировать многомерный массив алгоритм по определённому алгоритму?

Здравствуйте, у меня есть многомерный массив, в котором присутствует один флаг-параметр
array(
	array(
		"free"=>"0",
		"id"=>"86"
	),
	array(
		"free"=>"0",
		"id"=>"23"
	),
	array(
		"free"=>"0",
		"id"=>"23"
	),
	array(
		"free"=>"1",
		"id"=>"23"
	),
	array(
		"free"=>"1",
		"id"=>"43"
	),
	array(
		"free"=>"1",
		"id"=>"54"
	),
	array(
		"free"=>"1",
		"id"=>"65"
	)
	array(
		"free"=>"1",
		"id"=>"34"
	)
	array(
		"free"=>"1",
		"id"=>"32"
	)
)


Мне необходимо поменять массивы местами так, что бы получилось
free=1
free=1
free=0
free=1
free=1
free=0

То есть должно получится, что два бесплатных флага, один платный. Должно получиться так

<?php
array(
		array(
		"free"=>"1",
		"id"=>"86"
	),
	array(
		"free"=>"1",
		"id"=>"23"
	),
	array(
		"free"=>"0",
		"id"=>"65"
	)
		array(
		"free"=>"1",
		"id"=>"23"
	),
	array(
		"free"=>"1",
		"id"=>"23"
	),
	array(
		"free"=>"0",
		"id"=>"34"
	)
	array(
		"free"=>"1",
		"id"=>"43"
	),
	array(
		"free"=>"1",
		"id"=>"54"
	),	
	array(
		"free"=>"0",
		"id"=>"32"
	)						
)


Ума не приложе, как это правильно сделать, кроме как изобретать страшные велосипеды и костыли ...
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
$result = $free0 = $free1 = [];
foreach($data as $d) { // разделяем на два массива
  if ($d['free']) {
    $free1[] = $d;
  } else {
    $free0[] = $d;
  }
}

while(!empty($free1) || !empty($free0)) { // объединяем в нужном соотношении
  if(!empty($free1)) $result[] = array_shift($free1);
  if(!empty($free1)) $result[] = array_shift($free1);
  if(!empty($free0)) $result[] = array_shift($free0);
}
sandbox.onlinephpfunctions.com/code/ab8d8873bb9057...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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