Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Операция над массивом


Автор: webevt 28.2.2008, 14:17
С помощью функции mysql_fetch_array () и цикла мы получаем многомерный ассоциативный массив вида $Arr [\числовой индекс\] ['\название поля\']. 

Этот массив выводится так:
Код

foreach ( $FetchResult as $txt )
  echo $txt ['text'] ."<br/>";


Вот функция получения массива:
Код

 function Fetch ( $Result, $Type = MYSQL_ASSOC )
 {
   if ( !$Result )
     trigger_error ( "Получен неверный результат запроса!" );

   while ( $FetchResult [] = mysql_fetch_array ( $Result, $Type ) ) { }

   return $FetchResult;
 }



Как из полученного массива ( или во время его получения ) сделать следующий массив вида:
$Arr ['\название поля\'] [\числовой индекс\]
На "изменение" массива желательно потратить как можно меньше ресурсов.

Вывод нового массива:
Код

foreach ( $FetchResult ['text'] as $txt )
  echo $txt ."<br/>";



Спасибо за внимание smile

Автор: GeneralElectric 28.2.2008, 14:22
непонятно, какие сложности.
какой массив хочешь получить - так его и формируй.
$FetchResult ["text"][] = mysql_fetch_array ( $Result, $Type ) 
поскольку описание задачи невнятное, мой пример может не подойти

Автор: webevt 28.2.2008, 15:10
GeneralElectric, дело в том, что я не знаю ключей ассоциативного массива. И mysql_fetch_array () возвращает все столбцы сразу, а не по одному

Попробую объяснить лушче..
Допустим, есть таблица:
Код

| id | text |
| 1  |  а   |
| 2  |  б   |
| 3  |  в   |
| 4  |  г   |
| 5  |  д   |
| 6  |  е   |
| 7  |  ё   |


Мне нужно из нее получить массив, содержащий два массива( id и text ), в которых будут находится все значения таблицы. Тоесть, массив $FetchResult ['id'] будет содержать все значения столбца  id , а массив $FetchResult ['text']  - все значения столбца text данной таблицы.

Автор: Kaiden 28.2.2008, 22:17
Если я вас правильно понял, то такой код должен подойти.
Код

$result = mysql_query('SELECT * FROM `table`');
$len = mysql_num_rows($result);
for ( $i = 0; $i < $len; $i++ ) {
    $row = mysql_fetch_assoc($result);
    foreach ( $row as $key => $value )
        $FetchResult[$key][$i] = $value;
}

Автор: webevt 29.2.2008, 10:09
Kaiden, вариант, но я примерно такой уже писал...
Не много ли такой код ресурсов кушает, если массив достаточно большой(> 20 полей, > 100 записей) получатся?
Вот перечитываю все функции по массивам, мож чего-то с фильтрациями и пересечаниями выйдет...

Автор: GeneralElectric 29.2.2008, 10:16
непонятно, с чего этот код будет кушать много ресурсов.
непонятно, откуда вообще такая забота о ресурсах на пустом месте.
непонятно, почему надо просить других людей писать точно такой же код, какой уже сам написал. Почему сразу его не показать и не привести обоснованные сомнения в производительности?

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

Автор: webevt 29.2.2008, 13:34
Цитата(GeneralElectric @  29.2.2008,  10:16 Найти цитируемый пост)
точно ли надо обрабатывать все эти данные в скрипте, а не средствами базы... 

Писать во всех модулях запросы по каждому из полей таблицы - не выгодно.


Цитата(GeneralElectric @  29.2.2008,  10:16 Найти цитируемый пост)
непонятно, с чего этот код будет кушать много ресурсов.

Если не будет, то все ок)


Цитата(GeneralElectric @  29.2.2008,  10:16 Найти цитируемый пост)
непонятно, откуда вообще такая забота о ресурсах на пустом месте.

Экономия ресурсов - святое дело, ибо их много не бывает


Цитата(GeneralElectric @  29.2.2008,  10:16 Найти цитируемый пост)
непонятно, почему надо просить других людей писать точно такой же код, какой уже сам написал. Почему сразу его не показать и не привести обоснованные сомнения в производительности?

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

Автор: GeneralElectric 29.2.2008, 13:47
Цитата(webevt @  29.2.2008,  13:34 Найти цитируемый пост)
Цитата(GeneralElectric @  29.2.2008,  10:16 )
Писать во всех модулях запросы по каждому из полей таблицы - не выгодно.

Не понял, какая связь. Это настройки какие-то, что ли?
Цитата(webevt @  29.2.2008,  13:34 Найти цитируемый пост)
Экономия ресурсов - святое дело

Нет. Наоборот. Не святое, я от лукавого.
Всем борцам за ресурсы рекомендую пересесть на ассемблер. Или перестать вспоминать о ресурсах по любому поводу, к месту и не к месту.
Копейку, которая валяется на дороге, подберет не каждый. А производительность участка, который сранвим с производительностью всего скрипта, как копецка - с месячной зарплатой, будут отлаживать неделями.
Цитата(webevt @  29.2.2008,  13:34 Найти цитируемый пост)
 а свой стеснялся выложить

лучше бы ты постеснялся напрягать людей делать бесполезную работу.

Автор: webevt 29.2.2008, 15:14
GeneralElectric, 
 чтобы получить такой массив, какой мне нужен, средствами базы, нужно делать выборку каждого поля в таблице, многовато запросов для получения одного массива.

В общем, вопрос решен)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)