PHP多维数组排序和删除行
我有一个PHP多维关联数组,其结构如下:PHP多维数组排序和删除行,php,multidimensional-array,associative-array,Php,Multidimensional Array,Associative Array,我有一个PHP多维关联数组,其结构如下: Fields: TYPE - COLOUR - SIZE - PRICE [0] - rose, var2, var3, price [1] - rose, var2, var3, price [2] - daffodil, var2, var3, price [3] - tulip, var2, var3, price [4] - rose, var2, var3, price [5] - tulip, var2, var3, price [6] -
Fields: TYPE - COLOUR - SIZE - PRICE
[0] - rose, var2, var3, price
[1] - rose, var2, var3, price
[2] - daffodil, var2, var3, price
[3] - tulip, var2, var3, price
[4] - rose, var2, var3, price
[5] - tulip, var2, var3, price
[6] - daffodil, var2, var3, price
我想遍历这个数组,对于每种类型,我想选择价格最低的一种,并删除该类型的所有其他行。这些钥匙不必保留
最后,我想要一个数组,每个类型只有一行
对于如何做到这一点感到困惑,因此收到了所有的建议
编辑:
抱歉,我的数组可能已经足够清晰了,下面是它的另一个片段:
Fields: TYPE - COLOUR - SIZE - PRICE
[0] - type=>rose, colour=>var2, size=>var3, price=>£price
[1] - type=>rose, colour=>var2, size=>var3, price=>£price
[2] - type=>daffodil, colour=>var2, size=>var3, price=>£price
[3] - type=>tulip, colour=>var2, size=>var3, price=>£price
[4] - type=>rose, colour=>var2, size=>var3, price=>£price
[5] - type=>tulip, colour=>var2, size=>var3, price=>£price
[6] - type=>daffodil, colour=>var2, size=>var3, price=>£price
您的任务实际上不需要排序。您只是在搜索最低的项adj。每种类型!-这还可以!完成
$cheapest = array();
foreach ($flower as $id => $f) {
$c_price = $cheapest[$f['type']]['price'];
if (!$c_price || $f['price'] < $c_price) {
$cheapest[$f['type']] = $f;
}
}
print_r($cheapest);
编辑:修改我的答案。这将创建一个关联数组,其中键是类型,值是价格最低的原始数组
祝你好运 您的任务实际上不需要排序。您只是在搜索最低的项adj。每种类型!-这还可以!完成
$cheapest = array();
foreach ($flower as $id => $f) {
$c_price = $cheapest[$f['type']]['price'];
if (!$c_price || $f['price'] < $c_price) {
$cheapest[$f['type']] = $f;
}
}
print_r($cheapest);
编辑:修改我的答案。这将创建一个关联数组,其中键是类型,值是价格最低的原始数组
祝你好运 让米哈伊尔更进一步,希望更符合你的要求:
$selectedRows = array();
foreach ($flower as $id => $f) {
if( ! isset( $selectedRows[$f['type']] ) ) {
$selectedRows[$f['type']]['id'] = $f['id'];
$selectedRows[$f['type']]['price'] = $f['price'];
} else {
if ( $f['price'] < $selectedRows[$f['type']]['price'] ) {
$selectedRows[$f['type']]['price'] = $f['price'];
$selectedRows[$f['type']]['id'] = $f['id'];
}
}
}
// Now you can look through the selectedRows, use the
foreach( $selectedRows as $v ){
echo $flower[$v['id']].' $'.$v['price'].'<br />';
}
另外,如果您的阵列是这样制作的:
$flower[0][rose][blue][large][4.99]=任意
我建议将其改为:
$flower[0]=>数组类型=>玫瑰色,颜色=>蓝色,大小=>大型,价格=>4.99 让米哈伊尔更进一步,希望更符合你的要求:
$selectedRows = array();
foreach ($flower as $id => $f) {
if( ! isset( $selectedRows[$f['type']] ) ) {
$selectedRows[$f['type']]['id'] = $f['id'];
$selectedRows[$f['type']]['price'] = $f['price'];
} else {
if ( $f['price'] < $selectedRows[$f['type']]['price'] ) {
$selectedRows[$f['type']]['price'] = $f['price'];
$selectedRows[$f['type']]['id'] = $f['id'];
}
}
}
// Now you can look through the selectedRows, use the
foreach( $selectedRows as $v ){
echo $flower[$v['id']].' $'.$v['price'].'<br />';
}
另外,如果您的阵列是这样制作的:
$flower[0][rose][blue][large][4.99]=任意
我建议将其改为:
$flower[0]=>数组类型=>玫瑰色,颜色=>蓝色,大小=>大型,价格=>4.99 编辑Mikhail解决方案的版本,以返回OP要求的内容
$minid = array();
$minPrice = array();
foreach ($flower as $id => $f) {
if (!isset($minPrice[$f['type']]) || $f['price'] < $minPrice[$f['type']]) {
$minPrice[$f['type']] = $f['price'];
$minid[$f['type']] = $id;
}
}
$filtered = array();
foreach ($minid as $id)
$filtered[] = $flower[$id];
Mikhail解决方案的编辑版本,以返回OP要求的内容
$minid = array();
$minPrice = array();
foreach ($flower as $id => $f) {
if (!isset($minPrice[$f['type']]) || $f['price'] < $minPrice[$f['type']]) {
$minPrice[$f['type']] = $f['price'];
$minid[$f['type']] = $id;
}
}
$filtered = array();
foreach ($minid as $id)
$filtered[] = $flower[$id];
这是如何关联的?嗨,我已经编辑了上面的示例,以便更清楚地显示它。数组的var_导出将有助于提供相同的示例。顺便说一句,我敢打赌你的数据库里有所有这些数据。如果是这种情况,您可以将工作卸载到DB而不是PHPHi,不,我的数据不是来自DB,而是动态数据。现在就来看看你的答案!好吧,这真是一个遗憾:如果你最终建立了它的数据库,请查看以下线程:这是如何关联的?嗨,现在我已经编辑了上面的示例,以便更清楚地显示它。数组的var_导出将有助于提供相同的示例。顺便说一句,我敢打赌你的数据库里有所有这些数据。如果是这种情况,您可以将工作卸载到DB而不是PHPHi,不,我的数据不是来自DB,而是动态数据。现在就来看看你的答案!好吧,这是一个耻辱:如果你最终建立了它的数据库,检查一下这个线程:OP不仅仅是搜索最低的项,而是搜索每种类型的最低项。我喜欢=$f解决方案。这比我想象的要优雅得多。@phpmeh,当我学会这个技巧时,它似乎是多余的,但我已经开始在许多情况下使用它来准备将来使用的数据。@Mikhail我最喜欢的事情是与教授我新技巧的博士生会面:p OP不仅仅是搜索最低的项目,而是针对每种类型的最低项。我喜欢=$f解决方案。“这比我想象的要优雅得多。”phpmeh,当我学会这个把戏时,它似乎是多余的,但是我已经开始在很多情况下使用它来准备数据以备将来使用。@Mikhail我最喜欢的事情是与博士生见面,他们教我新的技巧:p这似乎对我创建一个带有数字键的数组很有用,每种类型的数组最后只剩下一个。谢谢。这对我创建一个带有数字键的数组似乎很有用,数组的末尾只剩下一种类型。谢谢