2014-12-29 5 views
0

저는 멀티 디 미네 이터 배열로 작업 중이며 동적 호환성 차트를 만들려고 노력하고 있습니다. 4 값 1과 4 값이있는 경우가능한 빈 슬롯이있는 배열을 펼치는 방법은 무엇입니까?

Given Data : 
4 instances of Value 1 
7 instances of Value 2 

이상적인 최종 결과의 예

4 값 1과 7 값이있는 경우 2의는

[0] Value 2 
[1] Value 1 
[2] Value 2 
[3] 
[4] Value 2 
[5] Value 1 
[6] Value 2 
[7] 
[8] Value 2 
[9] Value 1 
[10] Value 2 
[11] Value 1 
[12] Value 2 

2의 (균등 공간을하려고 중복되지 않고 출력)

[0] Value 1 
[1] Value 2 
[2] 
[3] Value 1 
[4] Value 2 
[5] 
[6] 
[7] Value 1 
[8] Value 2 
[9] 
[10] 
[11] Value 1 
[12] Value 2 

2 개의 인스턴스 s는 1이고 3은 2입니다.

[0] Value 1 
[1] Value 2 
[2] 
[3] 
[4] 
[5] 
[6] Value 2 
[7] 
[8] 
[9] 
[10] 
[11] Value 1 
[12] Value 2 

배열의 버킷 크기는 12-24입니다. 예제에서는 12 개를 사용합니다. 인스턴스 수가 12 개 버킷에 맞지 않는 경우 24 개까지 이동할 수 있습니다. 24 개에 맞지 않으면 오류가 발생합니다.

array_pop을 사용하여 배열을 역전하려고 시도한 모든 루프는 배열 중간에 빈 구멍을 만들거나 인스턴스를 고르게 퍼뜨리지 않습니다.


편집 : 다음은 내가 시도한 것입니다.

$table_array = range(0,12); 
// Method 1 

for ($i = 0; sizeof($table_array); $i++) 
{ 
    $ready_array[] = ($i % 2) ? array_pop($table_array) : array_shift($table_array); 
} 


// Method 2 

for ($i = 0; $i < sizeof($table_array); $i++) 
{ 
    $index = ($i % 2) ? sizeof($table_array) - ceil($i/2) : ceil($i/2); 
    $ready_array[$index] = $table_array[$i]; 
} 
ksort($ready_array); 

프로젝트 세부 사항 및 목표

나는 호환 호환되지 않는 알 약의 목록을 가지고있다.

사용자가 알약과 복용하는 약을 선택할 수있게했습니다. 그 바탕으로

, 나는 데이터베이스를 검색 및 호환성 내가 약을 복용하기 최소 12 시간의 기간을 값 1, 값 2

로 알려진 목록 작성에 따라 약을 일치합니다.

칼슘 4 개와 철분 3 개를 12 시간 동안 1 시간 간격으로 골고루 섞어서 겹치지 않게해야합니다. 칼슘 12 알, 아이언 12 알을 선택하면 24 시간 동안 약을 복용하게 할 수 있습니다. 귀하의 질문에 대한

+0

검사가 진술하는 경우 값을로드 할 때. –

+1

우선 순위는 'a', ab', aba', ababa 등입니다 (a가'값 1 '또는'값 2 '인 경우 중요하지 않습니다)? 내가 의미하는 바는 가능한 한 모든 값을 사이에 한 칸 띄워 둡니다 ('a'); 그렇지 않다면 가능한 최소한의 양의'ab'를 추가하십시오 (즉, 공백으로 둘러싸인 두 개의 서로 다른 값)? –

+1

위와 같이 알고리즘에 대한 기준을 명확히하고 시도 (실패) 시도의 예를 표시하십시오 – Steve

답변

0

몇 가지 아이디어 : array_chunk() 사용 및 array_count_values()

<?php 

$myarray = array(2,1,2,'',2,1,2,'',2,1,2,1,1,2,1,2,'',2,1,2,'',2,1,2,1,2); 
$tests = array_chunk($myarray, 13); 
//print_r($tests); 

function mytest($tests) 
{ 
    foreach($tests as $test) 
    { 
     // play your test ! 
     print_r(array_count_values($test)); 
    }  
} 
// add your argument for your test 
echo mytest($tests); 
?> 

출력 :

Array 
(
    [2] => 6 
    [1] => 5 
    [] => 2 
) 
Array 
(
    [2] => 7 
    [1] => 4 
    [] => 2 
) 

테스트를 참조하십시오 : http://codepad.org/M9u5G0je