如何在PHP中使用数量/价格数据正确转换数组?
我似乎无法对这件事保持清醒 我得到了一个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 ),
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。