Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP多维数组排序和删除行_Php_Multidimensional Array_Associative Array - Fatal编程技术网

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] -

我有一个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] - 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这似乎对我创建一个带有数字键的数组很有用,每种类型的数组最后只剩下一个。谢谢。这对我创建一个带有数字键的数组似乎很有用,数组的末尾只剩下一种类型。谢谢