如何在PHP中使用数量/价格数据正确转换数组?

如何在PHP中使用数量/价格数据正确转换数组?,php,arrays,function,loops,Php,Arrays,Function,Loops,我似乎无法对这件事保持清醒 我得到了一个PHP数组,看起来像这样: array ( 0 => array ( 0 => 50, 1 => 0.80 ), 1 => array ( 0 => 300, 1 => 0.50 ), 2 => array ( 0 => 600, 1 => 0.30 ),

我似乎无法对这件事保持清醒

我得到了一个PHP数组,看起来像这样:

array (
    0 => array (
        0 => 50,
        1 => 0.80
    ),
    1 => array (
        0 => 300,
        1 => 0.50
    ),
    2 => array (
        0 => 600,
        1 => 0.30
    ),
    3 => array (
        0 => 1000,
        1 => 0.20
    ),
    4 => array (
        0 => 4000,
        1 => 0.10
    )
);
array (
    0 => array (
        0 => 100,
        1 => 0.80
    ),
    1 => array (
        0 => 500,
        1 => 0.50
    ),
    2 => array (
        0 => 1000,
        1 => 0.20
    ),
    3 => array (
        0 => 5000,
        1 => 0.10
    )
);
一种数组数组,其中内部数组的第一个索引表示数量,而第二个索引表示价格

我想将这些数据导入我的数据库,但要以特定的方式导入

我有一些我想跟踪的具体数量,这些数量由以下数组定义:

array(10,100,500,1000,5000,10000);
然后,我想使原始阵列更精细地调整到我希望看到的数量和价格。在这个特定的示例中,我想要一个如下所示的数组:

array (
    0 => array (
        0 => 50,
        1 => 0.80
    ),
    1 => array (
        0 => 300,
        1 => 0.50
    ),
    2 => array (
        0 => 600,
        1 => 0.30
    ),
    3 => array (
        0 => 1000,
        1 => 0.20
    ),
    4 => array (
        0 => 4000,
        1 => 0.10
    )
);
array (
    0 => array (
        0 => 100,
        1 => 0.80
    ),
    1 => array (
        0 => 500,
        1 => 0.50
    ),
    2 => array (
        0 => 1000,
        1 => 0.20
    ),
    3 => array (
        0 => 5000,
        1 => 0.10
    )
);
我的新数组将只包含特定的数量索引。 如果原始数组中存在数量,则使用该价格。如果它不存在,我会使用下一个最低数量的价格。如果不存在更低的数量,我不希望在新数组中看到该数量

我已经能够通过以下代码在很大程度上实现我想要的:

    function getRelativePrices($pricearray) {
    $relativeprices = array();
    $types = array(10,100,500,1000,5000,10000);
    foreach ($types as $q) {
        $new_array = array();
        foreach ($pricearray as $index => $array) {
            if ($q >= $array[0]) {
                $new_array = array($q, $array[1]);
            }
        }
        if (sizeof($new_array)) {
            $relativeprices[] = $new_array;
        }
    }
    return $relativeprices;
}
上面提到的唯一问题是,我得到了我不想要的额外数据。在我提供的示例中,我在末尾得到了第5个索引/数组,如下所示:

4 => array (
    0 => 10000,
    1 => 0.10
)
我不想要最后一件,因为我发现它是多余的,因为我知道5000件每件的价格是0.10美元,所以我可以假设10000件的价格是相同的,而“4000”是原始阵列中给出的最高数量

因此,我想请求帮助移除最后一块。
另外,我想知道是否有人有更好的编码方法来转换此数组。

您可以在内部foreach中执行以下操作:

foreach ($pricearray as $index => $array) { if ($q >= $array[0]) { if($q == 10000) { continue; } $new_array = array($q, $array[1]); } } foreach($pricearray作为$index=>$array){ 如果($q>=$array[0]){ 如果($q==10000){继续;} $new_array=array($q,$array[1]); } }
好的,我想这应该可以。我认为问题在于你的比较。。。见代码:

function getRelativePrices($pricearray) {
    $relativeprices= array();
    $types = array(10,100,500,1000,5000,10000);
    foreach($pricearray as $p) {
        $new_array = array();
        foreach($types as $t) {
            if($p[0] <= $t) {
                $new_array = array($t,$p[1]);
                break;
            }
        }
        if(sizeof($new_array)) {
            $relativeprices[] = $new_array;
        }
    }
    return $relativeprices;
}

您应该将数组更改为
array(0=>array('quantity'=>50,'price'=>0.80)
因此更容易看到,但这真的取决于您。好吧,我使用REST调用以该格式提供数组。因为我想显示原始数组和重新格式化数组的HTML表,我可能不会更改重新格式化数组的结构。但是,是的,我通常喜欢在可能的情况下使用键。我想您需要循环给定数组,然后对照类型数组进行检查。有关可能的解决方案,请参阅我的答案。抱歉,我通常不擅长完整地解释我的问题。它需要在某种意义上是一般性的,即我可能得到的数组tat仅包含100和500个数量。在这种情况下,我不希望在我的新数组中看到任何数量帽子大于500。