如何使用可能的空插槽扩展阵列?

时间:2014-12-29 22:02:03

标签: php arrays sorting dynamic-arrays

我正在使用多维数组,我很难尝试创建动态兼容性图表。

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

如果有4个值1和4个值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个1和3个实例。

[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);

项目详情和目标

我有一份兼容和不兼容的药片清单。

我让用户选择哪些药片以及他们服用了多少药片。

基于此,我搜索数据库并根据兼容性匹配药片,创建一个名为值1和值2的列表。

我至少有12个小时的时间来服药。

我应该腾出空间让我们在12小时的时间内以1小时的间隔均匀地说4钙和3铁,不要让它们重叠。如果他们选择12粒钙和12粒铁,我可以推迟24小时让他们服用这些药片。

1 个答案:

答案 0 :(得分: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