0

次のような多次元配列があります。

$orders = array(
  array(
    'id' => '123',
    'name' => 'John',
    'lastname'=>'Carter',
    'rate' => '1.0'
  ),
  array(
    'id' => '546',
    'name' => 'Ben',
    'lastname'=>'Wall',
    'rate' => '0.25'
  ),
  array(
    'id' => '666',
    'name' => 'John Bow',
    'lastname'=>'Porter',
    'rate' => '0.25'
  ),
  array(
    'id' => '156',
    'name' => 'John',
    'lastname'=>'Carter',
    'rate' => '0.5'
  )
);

レートが1.0未満の重複行を削除する関数を作成したい。結果配列は次のようになります。

$orders = array(
  array(
    'id' => '123',
    'name' => 'John',
    'lastname'=>'Carter',
    'rate' => '1.0'
  ),
  array(
    'id' => '546',
    'name' => 'Ben',
    'lastname'=>'Wall',
    'rate' => '0.25'
  ),
  array(
    'id' => '666',
    'name' => 'John',
    'lastname'=>'Porter',
    'rate' => '0.25'
  )
);
4

2 に答える 2

0

編集: ここの 2 番目の良いバージョン: http://ideone.com/zJ8vj


「重複」 - 同じ「レート」とはどういう意味ですか? 以下の例では、同じ 'rate' と 'rate' < 1.0 の重複した注文を削除します。これはあなたが必要とするものですか?

$tmpOrders = array();
foreach($orders as $order) {
    // Check only rate < 1.0
    if((float)$order['rate'] < 1.0) {
        // Check duplicate
        $exists = false;
        foreach($tmpOrders as $tmp) {
            if($tmp['rate'] == $order['rate']) {
                $exists = true;
                break;
            }
        }
        // Add if rate not exists
        if(!$exists) {
            $tmpOrders[] = $order;
        }
    }
    // Add all with rate >= 1.0
    else {
        $tmpOrders[] = $order;
    }
}
$orders = $tmpOrders;

echo "<pre>";
print_r($orders);
echo "<pre>";

結果:

Array
(
    [0] => Array
        (
            [id] => 123
            [name] => John
            [lastname] => Carter
            [rate] => 1.0
        )

    [1] => Array
        (
            [id] => 546
            [name] => Ben
            [lastname] => Wall
            [rate] => 0.25
        )

    [2] => Array
        (
            [id] => 156
            [name] => John
            [lastname] => Carter
            [rate] => 0.5
        )

)
于 2012-04-06T08:57:30.963 に答える