[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Упорядочить информацию из массива
dcum
Имеем массив с кучей инфы (там творится хаос), вот из-за этого хаоса нужно разбить все по "группам"
Например, в хаосе есть типы, как рулетки (5, 10 и 15 метров), гвозди (10, 20, 30 см) и т.д. Если пройтись foreach по этому массиву то все выводится вместе . Вопрос, как сделать так
Рулетки: (статичный текст)
Рулетка 5 метров(динамичный текст)
Рулетка 10 метров(динамичный текст)
Рулетка 15 метров(динамичный текст)
Гвозди (статичный текст)
Гвозди 10 см (динамичный текст)
Гвозди 20 см(динамичный текст)
Гвозди 30 см(динамичный текст)



Спустя 14 минут, 9 секунд (27.03.2010 - 02:51) qpayct написал(а):
к парядку, гасподин!

давай смотреть в корень. расскажи, как создаётся беспорядок?

Спустя 8 часов, 20 минут, 33 секунды (27.03.2010 - 11:11) dcum написал(а):
Цитата (qpayct @ 26.03.2010 - 23:51)
к парядку, гасподин!

давай смотреть в корень. расскажи, как создаётся беспорядок?

Очень сложно и мне не понятен, я на примере lgsl. Там принцип такой, в БД 1000 серверов (разных игр). Идет запрос на их состояние, все это записывается в кеш, а уж из него и выводится на страницу.

Спустя 1 час, 5 минут, 13 секунд (27.03.2010 - 12:16) ZigZag написал(а):
Все равно вопрос не понятен, приведи куски кода, как данные хранятся в массиве и прочую информацию, которая даст понимание как и что

Спустя 7 часов, 27 секунд (27.03.2010 - 19:17) qpayct написал(а):
dcum
нужно увидеть, как создаётся этот массив, тогда и будет о чём говорить

Спустя 2 часа, 27 минут, 18 секунд (27.03.2010 - 21:44) dcum написал(а):
Ну-ну
Свернутый текст

function lgsl_query_cached_all($request)

{

global $lgsl_config;



lgsl_database();



$mysql_query = "SELECT `type`,`ip`,`c_port`,`q_port`,`s_port` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `disabled`=0 ORDER BY `cache_time` ASC";

$mysql_result = mysql_query($mysql_query) or die(mysql_error());



$server_list = array();



while ($mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC))

{

if (strpos($request, "c") === FALSE && lgsl_timer("check")) { $request .= "c"; }



$server = lgsl_query_cached($mysql_row['type'], $mysql_row['ip'], $mysql_row['c_port'], $mysql_row['q_port'], $mysql_row['s_port'], $request);



if ($lgsl_config['hide_offline'][0] && !$server['b']['status']) { continue; }



$server_list[] = $server;

}



return $server_list;

}



//------------------------------------------------------------------------------------------------------------+



function lgsl_query_cached_zone($request, $zone_number)

{

global $lgsl_config;



lgsl_database();



$zone_number = intval($zone_number);

$zone_random = intval($lgsl_config['random'][$zone_number]);



if ($zone_random)

{

$mysql_query = "SELECT `type`,`ip`,`c_port`,`q_port`,`s_port` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `zone`='{$zone_number}' AND `disabled`=0 ORDER BY rand()";

}

else

{

$mysql_query = "SELECT `type`,`ip`,`c_port`,`q_port`,`s_port` FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `zone`='{$zone_number}' AND `disabled`=0 ORDER BY `cache_time` ASC";

}



$mysql_result = mysql_query($mysql_query) or die(mysql_error());



$server_list = array();



while ($mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC))

{

if (strpos($request, "c") === FALSE && lgsl_timer("check")) { $request .= "c"; }



$server = lgsl_query_cached($mysql_row['type'], $mysql_row['ip'], $mysql_row['c_port'], $mysql_row['q_port'], $mysql_row['s_port'], $request);



if ($lgsl_config['hide_offline'][$zone_number] && !$server['b']['status']) { continue; }



$server_list[] = $server;



if ($zone_random && count($server_list) >= $zone_random) { break; }

}




return $server_list;

}

  $server_list = lgsl_query_cached_all("s");

$server_list = lgsl_sort_servers($server_list);



//------------------------------------------------------------------------------------------------------------+



$output .= "

<div style='text-align:center; font-size:10px; font-face:arial'>

<table cellpadding='4' cellspacing='2' style='margin:auto'>"
;



foreach ($server_list as $server)

{

$misc = lgsl_server_misc($server);

$server = lgsl_server_html($server);



$output .= "

<tr style='"
.lgsl_bg().";table-layout:fixed'>



<td>

<img alt='' src='
{$misc['icon_status']}' title='{$misc['text_status']}' />

</td>



<td>

<img alt='' src='
{$misc['icon_game']}' title='{$misc['text_type_game']}' />

</td>



<td title='
{$lgsl_config['text']['slk']}' style='text-align:right'>

<a href='
{$misc['software_link']}' style='text-decoration:none'>

{$server['b']['ip']}:{$server['b']['c_port']}

</a>

</td>



<td title='
{$server['s']['name']}' style='text-align:left'>

<div style='width:100%; overflow:hidden; height:1.3em'>


{$misc['name_filtered']}

</div>

</td>



<td style='white-space:nowrap; text-align:left'>


{$server['s']['map']}

</td>



<td style='white-space:nowrap; text-align:right'>


{$server['s']['players']} / {$server['s']['playersmax']}

</td>



<td style='white-space:nowrap; text-align:center'>

<a href='"
.lgsl_link($server['o']['id'])."'>

<img alt='' src='
{$misc['icon_details']}' style='border:none' title='{$lgsl_config['text']['vsd']}' />

</a>

</td>



</tr>"
;

}



$output .= "

</table>

</div>"
;
[/php]

Спустя 12 минут, 32 секунды (27.03.2010 - 21:57) qpayct написал(а):
ужас какой....
1. что ты передаёшь в $request и зачем ??
2. что возвращает lgsl_query_cached() ?? яж не вижу куда и зачем ты отправляешь данные blink.gif
3. твоя форма я так понимаю тебя не устраивает. тогда опиши, как ты хочешь выводить данные.

Спустя 7 минут, 55 секунд (27.03.2010 - 22:05) dcum написал(а):
Цитата (qpayct @ 27.03.2010 - 18:57)
ужас какой....
1. что ты передаёшь в $request и зачем ??
2. что возвращает lgsl_query_cached() ?? яж не вижу куда и зачем ты отправляешь данные blink.gif
3. твоя форма я так понимаю тебя не устраивает. тогда опиши, как ты хочешь выводить данные.


Легче будет приложить весь файл
О выводе данных я уже написал в общем смысле еще в первом посту, если конкретней,
то
CS 1.6 (статичная форма)
Пошли сервера (меняются)
Source (статичная форма)
Пошли сервера (меняются)
и т.д.

ЗЫ мда я ощущаю себя полным фуфлом на этом форуме, не вижу "прикрепить файл"

Спустя 3 минуты, 44 секунды (27.03.2010 - 22:08) qpayct написал(а):
dcum
короче, если расчитвваешь на мою помощь, покажи, что возвращает lgsl_query_cached() без этого я помочь не в силах

Спустя 1 минута, 39 секунд (27.03.2010 - 22:10) dcum написал(а):
Цитата (qpayct @ 27.03.2010 - 19:08)
dcum
короче, если расчитвваешь на мою помощь, покажи, что возвращает lgsl_query_cached() без этого я помочь не в силах

наверное это...
Свернутый текст

function lgsl_query_cached($type, $ip, $c_port, $q_port, $s_port, $request)

{

global $lgsl_config;



lgsl_database();



// PROTECT THE DATABASE QUERY



$type = mysql_real_escape_string($type);

$ip = mysql_real_escape_string($ip);

$c_port = mysql_real_escape_string(intval($c_port));

$q_port = mysql_real_escape_string(intval($q_port));

$s_port = mysql_real_escape_string(intval($s_port));



// GET CACHE



$mysql_query = "SELECT * FROM `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` WHERE `type`='{$type}' AND `ip`='{$ip}' AND `q_port`='{$q_port}' LIMIT 1";

$mysql_result = mysql_query($mysql_query) or die(mysql_error());

$mysql_row = mysql_fetch_array($mysql_result, MYSQL_ASSOC);



// CHECK IF SERVER IS NOT IN THE DATABASE AND ADD IF REQUESTED



if (!$mysql_row)

{

if (strpos($request, "a") !== FALSE)

{

$mysql_query = "INSERT INTO `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` (`type`,`ip`,`c_port`,`q_port`,`s_port`,`cache`,`cache_time`) VALUES ('{$type}','{$ip}','{$c_port}','{$q_port}','{$s_port}','','')";

$mysql_result = mysql_query($mysql_query) or die(mysql_error());

$mysql_row['id'] = mysql_insert_id();

}

else

{

exit("LGSL PROBLEM: REQUESTED SERVER NOT IN DATABASE: '{$type} : {$ip} : {$c_port} : {$q_port} : {$s_port} : {$request}'");

}

}




// UNPACK CACHE AND CACHE TIMES



$cache = unserialize(base64_decode($mysql_row['cache']));

$cache_time = explode("_", $mysql_row['cache_time']);

$cache_time[0] = intval($cache_time[0]);

$cache_time[1] = intval($cache_time[1]);

$cache_time[2] = intval($cache_time[2]);



// SET THE SERVER AS OFFLINE AND PENDING WHEN THERE IS NO CACHE



if (!isset($cache['b']))

{

$cache = array();

$cache['b'] = array();

$cache['b']['status'] = 0;

$cache['b']['pending'] = 1;

}



// IF NEEDED CONVERT HOSTNAME TO IP



if ($lgsl_config['host_to_ip'])

{

$ip = gethostbyname($ip);

}



// ALWAYS UPDATE THESE WITH THE LATEST VALUES



$cache['b']['type'] = $type;

$cache['b']['ip'] = $ip;

$cache['b']['c_port'] = $c_port;

$cache['b']['q_port'] = $q_port;

$cache['b']['s_port'] = $s_port;

$cache['o']['request'] = $request;

$cache['o']['id'] = $mysql_row['id'];

$cache['o']['zone'] = $mysql_row['zone'];

$cache['o']['comment'] = $mysql_row['comment'];



if (!isset($cache['s']))

{

$cache['s'] = array();

$cache['s']['game'] = $type;

$cache['s']['name'] = $lgsl_config['text']['nnm'];

$cache['s']['map'] = $lgsl_config['text']['nmp'];

$cache['s']['players'] = 0;

$cache['s']['playersmax'] = 0;

$cache['s']['password'] = 0;

}



if (!isset($cache['e'])) { $cache['e'] = array(); }

if (!isset($cache['p'])) { $cache['p'] = array(); }



// CHECK WHAT IS NEEDED



$needed = "";



if (strpos($request, "c") === FALSE) // CACHE ONLY REQUEST

{

if (strpos($request, "s") !== FALSE && time() > ($cache_time[0]+$lgsl_config['cache_time'])) { $needed .= "s"; }

if (strpos($request, "e") !== FALSE && time() > ($cache_time[1]+$lgsl_config['cache_time'])) { $needed .= "e"; }

if (strpos($request, "p") !== FALSE && time() > ($cache_time[2]+$lgsl_config['cache_time'])) { $needed .= "p"; }

}




if ($needed)

{

// UPDATE CACHE TIMES BEFORE QUERY - PREVENTS OTHER INSTANCES FROM QUERY FLOODING THE SAME SERVER



$packed_times = time() + $lgsl_config['cache_time'] + 10;

$packed_times = "{$packed_times}_{$packed_times}_{$packed_times}";

$mysql_query = "UPDATE `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` SET `cache_time`='{$packed_times}' WHERE `id`='{$mysql_row['id']}' LIMIT 1";

$mysql_result = mysql_query($mysql_query) or die(mysql_error());



// GET WHAT IS NEEDED



$live = lgsl_query_live($type, $ip, $c_port, $q_port, $s_port, $needed);



if (!$live['b']['status'] && $lgsl_config['retry_offline'] && !$lgsl_config['feed']['method'])

{

$live = lgsl_query_live($type, $ip, $c_port, $q_port, $s_port, $needed);

}



// CHECK AND CONVERT TO UTF-8 WHERE NEEDED



$live = lgsl_charset_convert($live, lgsl_charset_detect($live));



// IF SERVER IS OFFLINE PRESERVE SOME OF THE CACHE AND CLEAR THE REST



if (!$live['b']['status'])

{

$live['s']['game'] = $cache['s']['game'];

$live['s']['name'] = $cache['s']['name'];

$live['s']['map'] = $cache['s']['map'];

$live['s']['password'] = $cache['s']['password'];

$live['s']['players'] = 0;

$live['s']['playersmax'] = $cache['s']['playersmax'];

$live['e'] = array();

$live['p'] = array();

}



// MERGE LIVE INTO CACHE



if (isset($live['b'])) { $cache['b'] = $live['b']; }

if (isset($live['s'])) { $cache['s'] = $live['s']; $cache_time[0] = time(); }

if (isset($live['e'])) { $cache['e'] = $live['e']; $cache_time[1] = time(); }

if (isset($live['p'])) { $cache['p'] = $live['p']; $cache_time[2] = time(); }



// UPDATE CACHE



$packed_cache = mysql_real_escape_string(base64_encode(serialize($cache)));

$packed_times = mysql_real_escape_string(implode("_", $cache_time));

$mysql_query = "UPDATE `{$lgsl_config['db']['prefix']}{$lgsl_config['db']['table']}` SET `status`='{$cache['b']['status']}',`cache`='{$packed_cache}',`cache_time`='{$packed_times}' WHERE `id`='{$mysql_row['id']}' LIMIT 1";

$mysql_result = mysql_query($mysql_query) or die(mysql_error());

}



// RETURN ONLY THE REQUESTED



if (strpos($request, "s") === FALSE) { unset($cache['s']); }

if (strpos($request, "e") === FALSE) { unset($cache['e']); }

if (strpos($request, "p") === FALSE) { unset($cache['p']); }



return $cache;

}

Спустя 14 минут, 13 секунд (27.03.2010 - 22:24) qpayct написал(а):
так.
массив построен неправильно. советую выводить данные из таблицы в ассоциативный массив сохраняя таким образом ключи для дальнейшего удобства в его разборе. для наглядности привожу пример:
$i = 0;
$req = mysql_query("SELECT * FROM table");
while ($row = mysql_fetch_assoc($req)) {
foreach($row as $key => $val) {
$array[$i][$key] = $val;
}
$i++;
}

Спустя 4 минуты, 27 секунд (27.03.2010 - 22:29) dcum написал(а):
мда помог

Спустя 4 минуты, 14 секунд (27.03.2010 - 22:33) qpayct написал(а):
конечно. учись, пока я жив

Спустя 16 минут, 41 секунда (27.03.2010 - 22:49) dcum написал(а):
Ок, на этом форуме есть люди, которые помогут мне из "неправильного" массива сгруппировать данные? Или ждать следующего умника, который только и может задавать бесполезные вопросы, а в конце заключить - неправильный массив.

Спустя 23 минуты, 37 секунд (27.03.2010 - 23:13) qpayct написал(а):
dcum ну зачем же так? я ведь тебе сказал суть проблемы или ты хочешь, чтоб я за тебя всё делал ?? rolleyes.gif

Спустя 1 час, 53 минуты, 58 секунд (28.03.2010 - 01:07) dcum написал(а):
Цитата (qpayct @ 27.03.2010 - 20:13)
dcum ну зачем же так? я ведь тебе сказал суть проблемы или ты хочешь, чтоб я за тебя всё делал ?? rolleyes.gif

единственное, что ты сделал так это набил себе посты, если не знаешь, как помочь, зачем было вообще лезть в тему? Ну, да, риторический вопрос.

Спустя 11 минут, 10 секунд (28.03.2010 - 01:18) qpayct написал(а):
иди колупай картошку стаканом, грубиян. пользы больше будет

Спустя 2 минуты, 33 секунды (28.03.2010 - 01:21) Adil написал(а):
Ты можешь показать структуру массива? через print_r.
Желательно:
print "<pre>";
print_r($array);
print "</pre>";

Спустя 10 часов, 27 минут, 56 секунд (28.03.2010 - 10:49) dcum написал(а):
Цитата (Nezabivaemiy @ 27.03.2010 - 22:21)
Ты можешь показать структуру массива? через print_r.
Желательно:
print "<pre>";
print_r($array);
print "</pre>";

Array
(
[
b] => Array
(
[
type] => halflife
[ip] => 92.241.176.65
[c_port] => 27042
[q_port] => 27042
[s_port] => 0
[status] => 1
[id] => 16
[rating] => -16
)

[
o] => Array
(
[
request] => sc
[id] => 16
[zone] => 0
[comment] =>
)

[
s] => Array
(
[
name] => Cs.FreeArena.Ru PlagueMod #2
[map] => zm_sewers
[game] => cstrike
[players] => 0
[playersmax] => 32
[password] => 0
[rating] => -16
[id] => 16
)

)


вот по [game] и хотелось бы сделать категории

Спустя 10 часов, 41 минута, 38 секунд (28.03.2010 - 21:30) Adil написал(а):
Отлично массив есть. Теперь покажи как ты хочешь чтобы этот массив выглядел?

Спустя 1 час, 13 минут, 31 секунда (28.03.2010 - 22:44) dcum написал(а):
Цитата (Nezabivaemiy @ 28.03.2010 - 18:30)
Отлично массив есть. Теперь покажи как ты хочешь чтобы этот массив выглядел?

Counter-Strike 1.6 Servers:
Server 1
Server 2
Server 3
Counter-Strike Source:
Server 1
Server 2
Server 3
Quake 3
Server 1
Server 2
Server 3
Быстрый ответ:

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