[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите совместить данные из 2х массивов
FORMAT
Привет всем. В PHP совсем недавно. Доделываю модуль для CMS DLE. Стоит следующая задача:

Модуль отображает список пользователей , просмотревших страницу другого пользователя, на ней в виде ссылок на чужие профили. Данные о просмотре профиля заносятся в отдельную колонку в таблице пользователей в виде одной строки. Н-р: admin, tester, user1, tester2. Где каждое слово отделяется и преобразуется в ссылку.

Мне нобходимо добавить к этис ссылкам на пользователей ещё и иконку с полом пользователя. Пол пользователй записывается в другую таблицу в виде строки, к примеру, 0, 1, 2, 1. На выходе эти значения определяют картинку с полом.

Мне необходимо на выходе сделать так, чтобы около соответствующего пользователя выводился его пол. Н-р: 0 admin, 1 tester, 2 user1, 1 tester2.

Т.е. мне нужно разделённые данные из массива $viewers_sex совместить соответственно с разделёнными данными массива $viewers , и как-то это всё раздельно вывести на сайт через тег {viewers} (работает движок)

Ниже привёл, на мой взгляд почти готовый код(

PHP
<?
if(!
defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}
$alllast=$row['viewers'];
$alllast_sex=$row['viewers_sex'];
$viewer=$member_id['name'];
$viewer_sex=$member_id['sex'];
$all  = explode (",", $row['viewers']);
if ($row['user_id']==$member_id['user_id'])
{
}
 
else
{
if(!
in_array($viewer, $all)) 
{
if(
$alllast){
$db->query("UPDATE " . PREFIX . "_users set viewers='$viewer,$alllast' where user_id='{$row['user_id']}'");
$db->query("UPDATE " . PREFIX . "_users set viewers_sex='$viewer_sex,$alllast_sex' where user_id='{$row['user_id']}'");
}
else {
$db->query("UPDATE " . PREFIX . "_users set viewers='$viewer' where user_id='{$row['user_id']}'");
$db->query("UPDATE " . PREFIX . "_users set viewers_sex='$viewer_sex' where user_id='{$row['user_id']}'");
$db->query("UPDATE " . PREFIX . "_users set views=views+1 where user_id='{$row['user_id']}'");
}
}
}
            $viewers_sex = array ();
            $row['viewers_sex'] = explode( ",", $row['viewers_sex'] );

            foreach ( $row['viewers_sex'] as $value ) {
                
                $value 
= trim( $value );
                
                $viewers_sex
[] = "<img src=\"/templates/" . $config['skin'] . "/images/gender_" .$value. ".png\" style=\"width:20px;vertical-align:middle;\" />";
                
            
}
            
            
$viewers 
= array ();
$row['viewers'] = explode( ",", $row['viewers'] );

            foreach ( $row['viewers'] as $value ) {
            
                $value 
= trim( $value );
                
                if
( $config['allow_alt_url'] == "yes" ) $viewers[] = "<a href=\"" . $config['http_home_url'] . "user/" . urlencode( $value ) . "/\">" . $value . "</a>";
                else $viewers[] = "<a href=\"$PHP_SELF?do=subaction&amp;userinfo=" . urlencode( $value ) . "\">" . $value . "</a>";
            
            
}
            
if 
($row['viewers'])
{
            $tpl->set( '{viewers}', implode( ", ", $viewers ) );
}
else
{
$tpl->set('{viewers}', "Данный профиль никто не просматривал");
}

$tpl->set('{views}', $row['views']);


Спасибо за помощь!



Спустя 1 час, 25 минут, 46 секунд (18.06.2009 - 22:47) Alchemist написал(а):
вот чтобы таких проблем не возникало, надо правильно проектировать базу данных !!!

Спустя 3 минуты, 37 секунд (18.06.2009 - 22:50) sergeiss написал(а):
А по-моему, автор просто издевается над нами.

Во-первых, делает кучу апдейтов одних и тех же записей через несколько запросов. У какого Попова он этого начитался???

А во-вторых... Читаем внимательно:
Цитата (FORMAT @ 18.06.2009 - 22:21)
Мне необходимо на выходе сделать так, чтобы около соответствующего пользователя выводился его пол. Н-р: 0 admin, 1 tester, 2 user1, 1 tester2.

Интересные виды полы: админ, и тестеры и юзер... Я просто в ауте rolleyes.gif Одни междометия, и никаких слов smile.gif

Спустя 6 минут, 14 секунд (18.06.2009 - 22:57) kirik написал(а):
Цитата (sergeiss @ 18.06.2009 - 14:50)
У какого Попова он этого начитался???

biggrin.gif

Цитата (sergeiss @ 18.06.2009 - 14:50)
Интересные виды полы: админ, и тестеры и юзер...

biggrin.gif biggrin.gif biggrin.gif

FORMAT
а ты какого пола? tongue.gif

Спустя 35 минут, 59 секунд (18.06.2009 - 23:33) HardWoman написал(а):
Цитата
0 admin, 1 tester, 2 user1, 1 tester2.

А я поняла так - админ бесполый (0), а тестеры мальчики и девочки (1,2)

Спустя 9 часов, 16 минут, 37 секунд (19.06.2009 - 08:49) FORMAT написал(а):
не ожидал, что кто-то не сдержит проявление своей глупости;) думал здесь серьёзные люди сидят.

не можете помочь, так проходите мимо;)

Цитата
вот чтобы таких проблем не возникало, надо правильно проектировать базу данных !!!
я ищу решение проблемы, я не занимался разработкой популярного движка;) я лишь хочу сделать расширение.

Цитата
Во-первых, делает кучу апдейтов одних и тех же записей через несколько запросов. У какого Попова он этого начитался???

было влом разобраться в маленьком куске кода, прежде чем умничать?wink.gif с запросами у меня всё верно;)

HardWoman
тк и есть. если пользователь не указал пол, то обозначается как 0, муж 1, жен 2.
эти идентификаторы определяют соответствующие изображения пола.

Спустя 11 минут, 5 секунд (19.06.2009 - 09:00) glock18 написал(а):
Да, обидели человека.

FORMAT, вот честно. прочитав сообщение именно эти ляпы и бросаются в глаза. я посмотрев код теряется желание в нем разбираться.

задание сформулировано непонятно - то ли тебе надо массивы совместить, то ли тебе надо просто вывести их вместе. отсюда и реакция такая.

Спустя 15 минут, 28 секунд (19.06.2009 - 09:16) FORMAT написал(а):
glock18
в этом коде делается апдейт таблиц, где в разные таблицы записываются строчками через запятую список пользователей, а в другую пол к ним.

этот скрипт вставляются в другой, в котором есть полный запрос к таблице " . PREFIX . "_users.

список просмотревших пользователей выводится через $viewers, где данные из таблицы (которые были в виде одной строки через запятую) преобразуются в отдельные ссылки на профили пользователей.

список полов также через запятую можно вывести из другой таблицы через $viewers_sex. Эти данные преобразуются в иконки полов.

мне же необходимо сделать чтобы у соответствующего пользователя, выводимого через $viewers выводился соответственно его пол $viewers_sex

я не знаю, может сама реализация туговатая, но не рпредставляю, как с текущей конструкцие бд сделать по другому.

я в PHP пока не мастер. обратите пожалуйста внимание на этот код.

возможно ли как-то сделать, чтобы для каждого из $viewers например перед ссылкой <a href=\"" . $config['http_home_url'] . "user/" . urlencode( $value ) . "/\">" . $value . "</a> добавлялся соответствующий ему из $viewers_sex пол.


PHP
$viewers_sex = array ();
            
$row['viewers_sex'] = explode","$row['viewers_sex'] );

            foreach ( 
$row['viewers_sex'] as $value ) {
                
                
$value trim$value );
                
                
$viewers_sex[] = "<img src=\"/templates/" $config['skin'] . "/images/gender_" .$value".png\" style=\"width:20px;vertical-align:middle;\" />";
                
            }

$viewers = array ();
$row['viewers'] = explode","$row['viewers'] );

            foreach ( 
$row['viewers'] as $value ) {
            
                
$value trim$value );
                
                if( 
$config['allow_alt_url'] == "yes" $viewers[] = "<a href=\"" $config['http_home_url'] . "user/" urlencode$value ) . "/\">" $value "</a>";
                else 
$viewers[] = "<a href=\"$PHP_SELF?do=subaction&amp;userinfo=" urlencode$value ) . "\">" $value "</a>";
            
            }

Спустя 6 минут, 44 секунды (19.06.2009 - 09:22) sergeiss написал(а):
Цитата (FORMAT @ 19.06.2009 - 09:49)
с запросами у меня всё верно;)


То есть, ты хочешь сказать, что вот это набор запросов - это норма?
PHP
$db->query("UPDATE " PREFIX "_users set viewers='$viewer' where user_id='{$row['user_id']}'");
$db->query("UPDATE " PREFIX "_users set viewers_sex='$viewer_sex' where user_id='{$row['user_id']}'");
$db->query("UPDATE " PREFIX "_users set views=views+1 where user_id='{$row['user_id']}'");

Ты апдейтишь одни и те же строки, разные параметры. Эти запросы легко и просто сворачиваются в один запрос. А при большом разбере таблицы ты можешь выиграть на этом немало времени. Особенно, когда таких апдейтов много.

Что касается Попова... Это уже стал персонаж с нарицательным именем, типа как Иванушка-дурачок smile.gif У которого не стОит учиться.

И как правильно было сказано
Цитата
именно эти ляпы и бросаются в глаза, а посмотрев код теряется желание в нем разбираться.


Ну и, опять же, если ты уверен, что с запросами всё верно - то зачем же вопросы задавать на форуме? А если задаешь вопросы, то будь готов к критике.

И еще. Как правильно заметил Alchemist, твоя БД неправильно спроектирована. Вот с этого и надо начать. А потом уже понятнее станет с запросами.

Спустя 4 минуты, 55 секунд (19.06.2009 - 09:27) FORMAT написал(а):
то что верно, я писал про правильный апдейт конкретных параметров, чтобы было яснее. пока не было необходимо сворачивать в один.

ну я опять же повторяю, что это не моя бд...

можно или нельзя реализовать мою задачу, давайте тогда так.

Спустя 10 минут, 40 секунд (19.06.2009 - 09:38) glock18 написал(а):
Верно, слушай умные советы. Запросы, я бы сказал "работают", но как и что они делают... это неподдается критике.

теперь по вопросу:
чтобы вывести, тебе необязательно объединять массивы.

можно сделать это одним циклом:
PHP
$out '';
            
$row['viewers_sex'] = explode","$row['viewers_sex'] );
            
$row['viewers'] = explode","$row['viewers'] );

            foreach ( 
$row['viewers_sex'] as $key => $value ) {

                
$out .= ("<img src=\"/templates/" $config['skin'] . "/images/gender_" .trim$value ).
".png\" style=\"width:20px;vertical-align:middle;\" />"); // разделю на две строки, чтобы понятнее было

$name trim($row['viewers'][$key]);

                
$out .= ($config['allow_alt_url'] == "yes") ?
(
"<a href=\"" $config['http_home_url'] . "user/" urlencode$name ) . "/\">" $name "</a>") :
(
"<a href=\"$PHP_SELF?do=subaction&amp;userinfo=" urlencode$name ) . "\">" $name "</a>");
                
            }

воот, как-то вот так. не проверял, но смысл понятен должен быть.

Спустя 34 минуты, 51 секунда (19.06.2009 - 10:13) FORMAT написал(а):
glock18
спасибо за помощь. только на выходе запятая между ними не ставится.

$tpl->set( '{viewers}', implode( ", ", $out) );

скрипт пишет ошибку(

sergeiss
и вам спасибо, вытянул 1 запрос, и нашёл маленький недочёт при обновлении.

вобщем расширение работает почти как хотел)

Спустя 13 минут, 43 секунды (19.06.2009 - 10:27) glock18 написал(а):
Цитата (FORMAT @ 19.06.2009 - 07:13)
спасибо за помощь. только на выходе запятая между ними не ставится.


поставьте smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.