Многомерный массив, уникальный по значению (не массив)

У меня есть многомерный массив, который мне нужно сортировать с уникальностью, поскольку у меня есть дублированные записи, поэтому мне нужно, чтобы array_unique проходил через массив и удалял дубликаты по значению, например

 Array ( [0] => Array ( [id] => 324 [time_start] => 1301612580 [level] => 0.002 [input_level] => 0.002 ) [1] => Array ( [id] => 325 [time_start] => 1301612580 [level] => 0.002 [input_level] => 0.002 ) [2] => Array ( [id] => 326 [time_start] => 1301612580 [level] => 0.002 [input_level] => 0.002 ) ) 

Есть дублированный time_start , который они все одинаковые, также level и input_level но они не должны быть затронуты, только если есть соответствующий time_start он должен удалить его и обработать весь массив (массив больше, чем вы думаете, но я просто разместил небольшой пример массива) . Следует удалить обманы и вернуться следующим образом:

 Array ( [0] => Array ( [id] => 324 [time_start] => 1301612580 [level] => 0.002 [input_level] => 0.002 ) ) 

Вопросы, которые я нашел, которые не работают:

  • переформатировать многомерный массив на основе значения
  • Удалить элемент из многомерного массива на основе значения

 $input = array( /* your data */ ); $temp = array(); $keys = array(); foreach ( $input as $key => $data ) { unset($data['id']); if ( !in_array($data, $temp) ) { $temp[] = $data; $keys[$key] = true; } } $output = array_intersect_key($input, $keys); не $input = array( /* your data */ ); $temp = array(); $keys = array(); foreach ( $input as $key => $data ) { unset($data['id']); if ( !in_array($data, $temp) ) { $temp[] = $data; $keys[$key] = true; } } $output = array_intersect_key($input, $keys); 

или

 $input = array( /* your data */ ); $temp = $input; foreach ( $temp as &$data ) { unset($data['id']); } $output = array_intersect_key($input, array_unique($temp)); не $input = array( /* your data */ ); $temp = $input; foreach ( $temp as &$data ) { unset($data['id']); } $output = array_intersect_key($input, array_unique($temp)); 
 $temp = array(); array_filter($yourArray, function ($v) use (&$temp) { if (in_array($v['time_start'], $temp)) { return false; } else { array_push($temp, $v['time_start']); return true; } }); 

Использует array_filter() который будет фильтровать массив на основе результата обратного вызова (я использовал анонимную функцию, которая может использоваться с PHP 5.3). Значения time_start собираются во временный массив.

Я думаю, вам просто нужно пройти:

 $usedVals = array(); $outArray = array(); foreach ($targetArray as $arrayItem) { if (!in_array($arrayItem['time_start'],$usedVals)) { $outArray[] = $arrayItem; $usedVals[] = $arrayItem['time_start']; } } return $outArray; 
 $uniq = array(); foreach($no_unique as $k=>$v) if(!isset($uniq[$v['time_start']])) $uniq[$v['time_start']] = $v; $uniq = array_values($uniq);