[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа с массивом
kss
Ребят неужели нельзя из массивы выборки удалять пустые колонки? Неизвестное количество колонок в запросе и нужно оставить только те, в которых есть данные



Спустя 3 минуты, 31 секунда (11.12.2011 - 09:00) phz написал(а):
А если просто фильтровать через empty http://www.php.net/manual/en/function.empty.php#97772


Спустя 1 минута, 56 секунд (11.12.2011 - 09:01) kss написал(а):
Но как ее применить к столбцам и как ее применить к неизвестному количеству столбцов?

Спустя 1 час, 38 минут, 6 секунд (11.12.2011 - 10:40) kss написал(а):
может этим ALTER TABLE

Спустя 11 минут, 28 секунд (11.12.2011 - 10:51) kss написал(а):
Ну подскажите......... Если уж колонки известны, то как (буду их потом вручную вбивать, если иначе нельзя)

Спустя 1 час, 47 минут, 30 секунд (11.12.2011 - 12:39) Игорь_Vasinsky написал(а):
ну проверяй - если empty - то не используй.
непонял речь о массиве или массиве из БД

Спустя 5 минут, 56 секунд (11.12.2011 - 12:44) Michael написал(а):
Не совсем понятно о чем спрашивают, но вроде похоже на это - динамическое формирование текста запроса.

Спустя 27 минут, 45 секунд (11.12.2011 - 13:12) kss написал(а):
Нашел такой вариант. будет ли он работать?


$mat = array(
array(0,0,0,0,0,0),
array(0,0,0,0,0,0),
array(0,0,1,1,0,0),
array(0,1,1,1,0,0),
array(0,1,1,1,0,0),
array(0,0,0,0,0,0)
);


$key_array = array();

function arr($val, $key){
global $key_array;
if($val > 0) $key_array[$key] = $key;
}

array_walk_recursive($mat, "arr");

asort($key_array);

foreach($mat as $v){
if(array_sum($v) > 0){
foreach($key_array as $val){
echo $v[$val]."\t";
}
echo "<br />";
}
}

Спустя 32 секунды (11.12.2011 - 13:13) kss написал(а):
Как это переделать под мою ситуацию, помогите. пожалуйста

Спустя 3 минуты (11.12.2011 - 13:16) kss написал(а):

$q=mysql_query("SELECT *

FROM vedomost WHERE `kod_uch`='"
.$g."' GROUP by dat ORDER by dat desc ");

$row5 = mysql_query($q);

echo "<table border=\"1\" cellspacing='0' сellpadding='10'>\n";
$line = mysql_fetch_array($q, MYSQL_ASSOC);
echo "\t<tr>\n";

$j= array_keys($line);

foreach ($j as $col_value) {
echo "\t\t<th>$col_value</th>\n";
}
echo "</tr>";
$i=0;
do {
echo "<tr>";
$i++;

foreach ($line as $col_value) {
echo "<td class='rt'> $col_value</td>";
}
echo "</tr>";
}while ($line = mysql_fetch_array($q, MYSQL_ASSOC));
echo "</table>";

Спустя 44 минуты, 7 секунд (11.12.2011 - 14:00) kss написал(а):
Я так понял что это приминимо только к числовых значениям. а как бы также и с текстовыми строками поступить?

Спустя 3 минуты, 23 секунды (11.12.2011 - 14:03) Placido написал(а):
Если не известно количество и имена полей таблицы, можно, как выход, предварительно сделать дополнительный запрос, которым вытянуть имена полей
SHOW COLUMNS FROM `vedomost`;
, а потом в цикле сформировать запрос на выборку.

Спустя 3 минуты, 14 секунд (11.12.2011 - 14:06) kss написал(а):
м-да.... объяснил как отрезал))))

Спустя 4 минуты, 31 секунда (11.12.2011 - 14:11) kss написал(а):
Попробую с начала, есть таблица сформированная запросом из базы

user posted image

как убрать пустые столбцы?

Спустя 17 минут, 10 секунд (11.12.2011 - 14:28) killer8080 написал(а):
Цитата (kss @ 11.12.2011 - 07:56)
Ребят неужели нельзя из массивы выборки удалять пустые колонки?

$row = array_filter($row);

Спустя 30 минут, 26 секунд (11.12.2011 - 14:59) killer8080 написал(а):
вот пробуй
$fields = $data = array();
while($row = mysql_fetch_assoc($result)){
foreach(array_keys(array_filter($row)) as $field){
if(!in_array($field, $fields))
$fields []= $field;
}
$data []= $row;
}

foreach($data as &$row)
$row = array_filter($row, create_function('$v', 'global $fields; return in_array($v, $fields);'));

echo '<table border="1">',
'<tr><th>'.implode('</th><th>', $fields).'</th></tr>';

foreach($data as $row){
echo '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
}

echo '</table>';

Спустя 7 минут, 52 секунды (11.12.2011 - 15:06) kss написал(а):
колонки убирает и данные тоже... выводятся только названия

Спустя 2 минуты, 42 секунды (11.12.2011 - 15:09) killer8080 написал(а):
В смысле? Осталась только шапка таблицы?

Спустя 1 минута, 25 секунд (11.12.2011 - 15:11) kss написал(а):
да

Спустя 6 минут, 18 секунд (11.12.2011 - 15:17) kss написал(а):
изменил $result на $q тока, ибо запрос делается переменной $q. правильно ли я сделал?

Спустя 14 минут, 28 секунд (11.12.2011 - 15:31) killer8080 написал(а):
пробуй
$fields = $data = array();
while($row = mysql_fetch_assoc($q)){
foreach(array_keys(array_filter($row)) as $field){
if(!in_array($field, $fields))
$fields []= $field;
}
$data []= $row;
}

foreach($data as &$row){
foreach($row as $k => $v){
if(!in_array($k, $fields))
unset($row[$k]);
}
}


echo '<table border="1">',
'<tr><th>'.implode('</th><th>', $fields).'</th></tr>';

foreach($data as $row){
echo '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
}

echo '</table>';


PS с array_filter не получится, там колбэк принимает только значение элемента массива, а нужен ключ.

Спустя 7 минут, 33 секунды (11.12.2011 - 15:39) kss написал(а):
Талантливы человек тот, кто делает то, что умеет;
Гениальный то, что от него ждут.
Большое человеческое спасибо smile.gif
Деткам для школы вызвался "помочь". точнее их родителям.

Спустя 1 минута, 18 секунд (11.12.2011 - 15:40) killer8080 написал(а):
Хотя там нет смысла дважды по массиву бегать.
Лучше так, там я ещё добавил подстановку &nbsp; в пустые ячейки
$fields = $data = array();
while($row = mysql_fetch_assoc($q)){
foreach(array_keys(array_filter($row)) as $field){
if(!in_array($field, $fields))
$fields []= $field;
}
$data []= $row;
}


echo '<table border="1">',
'<tr><th>'.implode('</th><th>', $fields).'</th></tr>';

foreach($data as $row){
foreach($row as $k => $v){
if(!in_array($k, $fields))
unset($row[$k]);
}
$row = array_map(create_function('$v', 'return $v ? $v : "&nbsp;"'), $row);
echo '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
}

echo '</table>';

Спустя 2 минуты, 5 секунд (11.12.2011 - 15:42) killer8080 написал(а):
Цитата (kss @ 11.12.2011 - 14:39)
Талантливы человек тот, кто делает то, что умеет;
Гениальный то, что от него ждут.
Большое человеческое спасибо
Деткам для школы вызвался "помочь". точнее их родителям.

Да ладно, плюсика в карму будет достаточно rolleyes.gif

Спустя 3 минуты, 22 секунды (11.12.2011 - 15:46) Winston написал(а):
Цитата (kss @ 11.12.2011 - 07:56)
Ребят неужели нельзя из массивы выборки удалять пустые колонки

$row = array_diff($row, array(" "));

Спустя 2 минуты, 13 секунд (11.12.2011 - 15:48) killer8080 написал(а):
Winston
Не, не все так просто. Какие колонки удалить, станет известно только после получения всех рядов.

Спустя 7 минут, 30 секунд (11.12.2011 - 15:55) kss написал(а):
Последний вариант не работает sad.gif

Спустя 6 минут (11.12.2011 - 16:01) killer8080 написал(а):
Цитата (kss @ 11.12.2011 - 14:55)
Последний вариант не работает

а что выводит?

Спустя 2 минуты, 32 секунды (11.12.2011 - 16:04) kss написал(а):
Опять же только шапку

Спустя 58 секунд (11.12.2011 - 16:05) killer8080 написал(а):
Ах да, опять пропустил запятую user posted image
$fields = $data = array();
while($row = mysql_fetch_assoc($q)){
foreach(array_keys(array_filter($row)) as $field){
if(!in_array($field, $fields))
$fields []= $field;
}
$data []= $row;
}


echo '<table border="1">',
'<tr><th>'.implode('</th><th>', $fields).'</th></tr>';

foreach($data as $row){
foreach($row as $k => $v){
if(!in_array($k, $fields))
unset($row[$k]);
}
$row = array_map(create_function('$v', 'return $v ? $v : "&nbsp;";'), $row);
echo '<tr><td>'.implode('</td><td>', $row).'</td></tr>';
}

echo '</table>';

Спустя 7 минут, 5 секунд (11.12.2011 - 16:12) kss написал(а):
Кстати, последний элемент массива дублирует

Спустя 57 секунд (11.12.2011 - 16:13) killer8080 написал(а):
Цитата (kss @ 11.12.2011 - 15:12)
Кстати, последний элемент массива дублирует

В смысле?

Спустя 2 минуты, 27 секунд (11.12.2011 - 16:15) kss написал(а):
Последний вариант работаспособен и в нем нет дубля последней строки

Спустя 1 минута, 50 секунд (11.12.2011 - 16:17) kss написал(а):
Еще раз RESPECT и уважуха

Спустя 50 секунд (11.12.2011 - 16:18) killer8080 написал(а):
kss
Да не за что, обращайся smile.gif

Спустя 10 минут, 55 секунд (11.12.2011 - 16:29) killer8080 написал(а):
kss
а у тебя точно все правильно выводит?
Кажется этот код кривой, могут по путаться названия колонок и вывод. blink.gif

Спустя 1 минута, 20 секунд (11.12.2011 - 16:30) kss написал(а):
блин. ну ты даешь, сейчас проверю

Спустя 2 минуты, 42 секунды (11.12.2011 - 16:33) kss написал(а):
кривой. путаются sad.gif(((

Спустя 1 минута, 36 секунд (11.12.2011 - 16:35) killer8080 написал(а):
замени
echo '<tr><td>'.implode('</td><td>', $row).'</td></tr>';

на
echo '<tr>';
foreach($fields as $key)
echo '<td>'.$row[$key].'</td>';
echo '</tr>';

Спустя 1 минута, 24 секунды (11.12.2011 - 16:36) kss написал(а):
теперь ок!

Спустя 35 секунд (11.12.2011 - 16:37) kss написал(а):
не знаю, в любви тебе чтоли признаться7 ))))))))))))))

Спустя 2 минуты, 23 секунды (11.12.2011 - 16:39) killer8080 написал(а):
kss
А ты какого пола? biggrin.gif

Спустя 3 минуты, 9 секунд (11.12.2011 - 16:42) kss написал(а):
Раз уж пошла такая жара. как сделать зебру в таблице7

Спустя 32 секунды (11.12.2011 - 16:43) killer8080 написал(а):
Кстати, раз уж отказались от имплода, тогда можно ещё сократить
$fields = $data = array();
while($row = mysql_fetch_assoc($q)){
foreach(array_keys(array_filter($row)) as $field){
if(!in_array($field, $fields))
$fields []= $field;
}
$data []= $row;
}


echo '<table border="1">',
'<tr><th>'.implode('</th><th>', $fields).'</th></tr>';

foreach($data as $row){
echo '<tr>';
foreach($fields as $key)
echo '<td>'.($row[$key] ? $row[$key] : '&nbsp;').'</td>';
echo '</tr>';
}

echo '</table>';

Спустя 8 минут, 17 секунд (11.12.2011 - 16:51) killer8080 написал(а):
Цитата (kss @ 11.12.2011 - 15:42)
как сделать зебру в таблице7

Проще пареной репы
Пропищы в css классы zebra_white и zebra_black

.zebra_white td{
background-color: #FFF;
}

.zebra_black td{
background-color: #999;
}

$fields = $data = array();
while($row = mysql_fetch_assoc($q)){
foreach(array_keys(array_filter($row)) as $field){
if(!in_array($field, $fields))
$fields []= $field;
}
$data []= $row;
}


echo '<table border="1">',
'<tr><th>'.implode('</th><th>', $fields).'</th></tr>';

$i = 0;
foreach($data as $row){
echo '<tr class="'.($i % 2 ? 'zebra_white' :'zebra_black').'">';
foreach($fields as $key)
echo '<td>'.($row[$key] ? $row[$key] : '&nbsp;').'</td>';
echo '</tr>';
$i++;
}

echo '</table>';

Спустя 2 минуты, 27 секунд (11.12.2011 - 16:53) kss написал(а):
ну все... теперь я рад до небес. Будешь во Владивостоке с меня коньячок

Спустя 3 минуты, 47 секунд (11.12.2011 - 16:57) killer8080 написал(а):
Будешь в Симферополе, свистни biggrin.gif

Спустя 4 минуты, 5 секунд (11.12.2011 - 17:01) kss написал(а):
заметано...

Спустя 13 минут, 52 секунды (11.12.2011 - 17:15) killer8080 написал(а):
kss
кстати там есть один недостаток - колонки выводятся не в том порядке, как следуют в базе. Это важно?

Спустя 2 часа, 27 минут, 51 секунда (11.12.2011 - 19:43) kss написал(а):
Это не важно. пусть хоть как-то выводяться. Огромное спасибо
Быстрый ответ:

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