Фильтрация многомерного массива

chillz

Guest
Фильтрация многомерного массива

Есть массив вида:
PHP:
// $array
Array
(
    [0] => Array
        (
            [0] => test1
            [1] => test2
            [2] => test3
        )

    [1] => Array
        (
            [0] => test1
            [1] => test2
            [2] => test3
        )

    [2] => Array
        (
            [0] => test1
            [1] => test2
            [2] => test3
        )

)
Пытаюсь сделать так, что бы шла проверка на одинаковые значения, то есть, если
PHP:
$array[0][0] = $array[1][0];
$array[1][0] = $array[2][0];
То все элементы массива кроме 1(!) приравнять к "", именно приравнять, но не убрать из массива.
Ожидаемый результат:
PHP:
// $array
Array
(
    [0] => Array
        (
            [0] => test1
            [1] => test2
            [2] => test3
        )

    [1] => Array
        (
            [0] => 
            [1] => test2
            [2] => test3
        )

    [2] => Array
        (
            [0] => 
            [1] => test2
            [2] => test3
        )

)
Поразмыслив пришел к:
PHP:
for ($k=count($array);$k>0;$k--) {
if ($array[$k][0] == $array[$k-1][0]) $array[$k][0] = "";
}
}
Получился несколько тривиальный способ.
Например, нужно проверить все три элемента внутреннего массива...хочется избежать танцев с бубном. Есть ли более лояльные варианты ? Спасибо.

-~{}~ 09.09.05 01:46:

PHP:
  function joined_query($array,$num_fields) {
       for ($k=(count($array)-1);$k>0;$k--) {
               for ($i=0;$i<$num_fields;$i++) {
                $offset = $k-1;
                if ($array[$k][$i] == $array[$offset][$i]) $array[$k][$i] = "";
                  }
             }
       return $array;
       }
Если кто будет извращаться со скриптами а-ля пхпмэйадмин, и кому потребуется вывод категорий, как в форуме, с джоинами в запросе, эта функция обрезает повторный вывод результата LEFT(RIGHT) JOIN'a.
 

alpine

Новичок
chillz
А можешь этот запрос с JOIN-ином показать и структуру таблиц?
 

chillz

Guest
[sql]SELECT navigation_cat.name AS name,
articles.title AS title
FROM navigation_cat
LEFT JOIN articles ON (navigation_cat.id = cid);[/sql]
Это для вывода меню навигации с относящимися к каждому элементу статьями.
navigation_cat:
id
name
articles:
id
cid
title
...
 

alpine

Новичок
chillz
и эта часть у тебя повторяется:
[sql]
navigation_cat.name AS name, articles.title AS title
[/sql]
?

-~{}~ 09.09.05 01:18:

Если елементу меню не сопосталено ни одной статьи он у тебя должен выводиться?
 

chillz

Guest
navigation_cat.name повторяется, а articles.title идет до тех пор, пока cid соответствует id в навигации.
Код:
+----+-------+---------------------------------------------------------------------------------------------+
| id | name  | title                                                                                       |
+----+-------+---------------------------------------------------------------------------------------------+
| 10 | test2 | here goes test 1                                                                            |
| 10 | test2 | here goes test 2                                                                            |
| 10 | test2 | here goes test 3                                                                            |
+----+-------+---------------------------------------------------------------------------------------------+
После обработки:
Код:
+----+-------+---------------------------------------------------------------------------------------------+
| id | name  | title                                                                                       |
+----+-------+---------------------------------------------------------------------------------------------+
| 10 | test2 | here goes test 1                                                                            |
| 10 |         | here goes test 2                                                                            |
| 10 |         | here goes test 3                                                                            |
+----+-------+---------------------------------------------------------------------------------------------+
Ну, само собой, все это в таблицах. А функция вывода таблицы основана на mysql_field_name(); и mysql_result();
Где все данные заносятся в массив, потом обрабатываются.

-~{}~ 09.09.05 02:26:

Автор оригинала: alpine
Если елементу меню не сопосталено ни одной статьи он у тебя должен выводиться?
Нет, не должен. Это для админской панели, без элемента навигации статьи выводятся под заголовком No Group.
 

alpine

Новичок
Предлагаю получать массив вида:
PHP:
array(
   [1] => array(
      ['name'] = > 'name',
      ['articles'] => array(
          [1] => array(
              ['title'] => 'article1',
          ),
          [2] => array( ...
     ),
     [2] => array( ...
   ),
)
2 уровня "как в форуме" из такого массива строится 2мя вложенными форичами(думаю так будет прозрачнее).
И LEFT JOIN заменить на INNER JOIN(не будут выбираться категории в которых нет статей).
 

chillz

Guest
Автор оригинала: alpine
Предлагаю получать массив вида:
PHP:
array(
   [1] => array(
      ['name'] = > 'name',
      ['articles'] => array(
          [1] => array(
              ['title'] => 'article1',
          ),
          [2] => array( ...
     ),
     [2] => array( ...
   ),
)
И LEFT JOIN заменить на INNER JOIN.
Хм..вариант интересен. но ты забываешь о том, что существуют такие банальные запросы, как
[sql]
SELECT * FROM `news`;
[/sql]
У меня же, для того что бы "фильтровать" этот массив, в выозве функции достаточно добавить ($sql,true).
Но можно попробовать из получившихся массивов собрать один в представленную тобой схему.
завтра еще поиграюсь с этим и отпишусь. Спасибо ...;)
 
Сверху