У меня есть многомерный ассоциативный массив с свойством type
. Это выглядит так:
$data = array(
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "B"),
array( "name" => "SomeName", "type" => "B"),
array( "name" => "SomeName", "type" => "B"),
array( "name" => "SomeName", "type" => "C"),
array( "name" => "SomeName", "type" => "C")
);
Я хочу переупорядочить его, чтобы сделать предметы более равномерно распределенными (с минимальным количеством повторяющихся типов, если это возможно). Он должен выглядеть следующим образом:
array(
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "B"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "C"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "B"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "C"),
array( "name" => "SomeName", "type" => "A"),
array( "name" => "SomeName", "type" => "B")
);
То, что я пробовал до сих пор, заключалось в том, чтобы найти счетчик для каждого типа и всего:
$count_a = 5;
$count_b = 3;
$count_c = 2;
$total = 10;
А также соотношение ставок для каждого типа:
$ratio_a = 0.5; //(5/10)
$ratio_b = 0.3; //(3/10)
$ratio_c = 0.2; //(2/10)
Я просто застрял здесь. Должен ли я попытаться создать новое свойство index
с номером и затем отсортировать его? Или, может быть, использовать modulo-оператора? Я также попытался разделить элементы на 3 разных массива, если это упростит.