Вам понадобится два прохода массива заказов. Но это действительно проще, чем некоторые думают:
$duplicateUserId = array();
// Mark user ID's with more than one order
foreach ( $orders as $order ) {
$duplicateUserId[$order['userid']] = isset($duplicateUserId[$order['userid']]);
}
// Output each order
foreach ( $orders as $order ) {
echo formatOrder($order, $duplicateUserId[$order['userid']]);
}
// Format the output of each order
function formatOrder($order, $isDuplicated) {
// yadda yadda yadda
}
Предположим, что $ orders выглядит как
$orders = array(
array(
'orderid' => '2009091008261662',
'email' => 'john@example.com',
'userid' => '53'
),
array(
'orderid' => '2009091008261048',
'email' => 'john@example.com',
'userid' => '53'
),
array(
'orderid' => '2009091008262025',
'email' => 'fred@example.com',
'userid' => '103'
),
array(
'orderid' => '2009091008272082',
'email' => 'tom@example.com',
'userid' => '392'
),
array(
'orderid' => '2009091008265555',
'email' => 'john@example.com',
'userid' => '53'
)
);
Кроме того, может быть лучше сопоставить только userId, поскольку, предположительно, пользователи могут изменять свои электронные письма, а электронные письма уникальны для одного пользователя.