2016-03-02 1 views
1

Я выводит список координат, и я хочу автоматически выделить наличие дубликатов координат.Выделите и спрячьте повторяющиеся значения в многомерном массиве

<?php 

$coords = array(
    "7" => array(
     "x" => array("0" => "395"), 
     "y" => array("0" => "81"), 
     "z" => array("0" => "17") 
    ), 
    "14" => array(
     "x" => Array("0" => "115","1" => "531"), 
     "y" => Array("0" => "47","1" => "402"), 
     "z" => Array("0" => "21","1" => "18") 
    ), 
    "15" => array(
     "x" => array("0" => "528","1" => "3","2" => "531"), 
     "y" => array("0" => "207","1" => "162","2" => "402"), 
     "z" => array("0" => "24","1" => "25","2" => "18") 
    ) 
); 

foreach ($coords as $index => $xyz){ 

} 
?> 

Вот как выглядит массив. Вы заметите, что координаты в некоторых положениях могут быть дублированы (например, id #14 и #15).

Таким образом, дублирование должно соответствовать координатам x/y/z, но не по идентификатору.

Я не могу понять, как получить значение массива следующим образом, и скрыть дубликат:

7: 395x81x17 
14: 115x47x21 
14,15: 531x402x18 
15: 528x207x24 
15: 3x162x25 
+1

что у вас есть?/ – Drudge

+0

Форма ваших данных плохая. '$ coords = [" 14 "=> [[115,47,21], [531,402,18]]," 15 "=> [...], ...]' намного лучше. – naomik

ответ

0

Почему бы не просто сделать вид инвертированного индекса? Как

$inverted_index = []; 
foreach ($coords as $index => $xyz){ 
    for($i = 0; $i < count($xyz['x']); $i++) { 
     $hash = sprintf('%sx%sx%s', $xyz['x'][$i], $xyz['y'][$i], $xyz['z'][$i]); 
     if(!isset($inverted_index[$hash])) { 
      $inverted_index[$hash] = []; 
     } 
     $inverted_index[$hash][] = $index; 
    } 
} 

В результате вы получите $inverted_index, который может быть использован для отображения того, что вы хотите получить

foreach ($inverted_index as $coords => $index){ 
    printf("%s: %s\n", implode(',', $index), $coords); 
} 

Или просто получить доступ ко всем координатные точки с простым $inverted_index[sprintf('%sx%sx%s', $x, $y, $z)].

Решение не является дружественным к памяти и индексу здания каждый раз не очень хорошая идея, но это выглядит довольно просто для реализации и использования.

+0

Спасибо, это решение, которое я искал. Конечно, это нуждается в улучшении, но вы помогли мне достичь результата. –

Смежные вопросы