Оптимизация циклов

SocMaster

Профессор
Регистрация
26 Июл 2011
Сообщения
211
Реакции
49
Есть код в нем 4 цикла, пробовал по разному оптимизировать, но нифига. не получается
Код:
    foreach ($picsDataArr as $r)
    {
        $actualtime = gmdate("d Y H:i",$r['dateline']);
        $picsArr[$actualtime][$r['uid']][] = $r;
    }
    $i = 0;
   
    foreach ($picsArr as $row)
    {
        foreach ($picsArr as $subRow)
        {
            $resultArr[$i]['dateLine'] =  rus_month($subRow[0]['dateline']);
            $resultArr[$i]['userFullName'] = $subRow[0]['realname'];
            $resultArr[$i]['homeref'] = 'uid'.$subRow[0]['uid'];
            foreach ($subRow as $r)
                $resultArr[$i]['pic'][] = 'data/attachment/album/'.$r['filepath'];
        }
        $i++;
    }
или тут нельзя юзать меньше циклов?
 
А можно узнатькакие вводные данные и что надополучить? тут вижу что вы из одного цикла получаете массив данных, а потом опять этот массив разбираете.
 
Код:
array (
  '22 2014 11:35' =>
  array (
    1 =>
    array (
      0 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385713',
        'filepath' => '201409/22/143513f1t3n1q0yjlunr08.jpg',
      ),
      1 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385713',
        'filepath' => '201409/22/143513epwu7utiiwwaqji8.jpg',
      ),
      2 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385712',
        'filepath' => '201409/22/143512lpwnmi9y39vmi355.jpg',
      ),
      3 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385712',
        'filepath' => '201409/22/143512tcwqcct17kcx06tq.png',
      ),
      4 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385712',
        'filepath' => '201409/22/143512vpri9p0dxg201eu9.png',
      ),
      5 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385712',
        'filepath' => '201409/22/143512w9dyofakjfmox55k.png',
      ),
      6 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385711',
        'filepath' => '201409/22/143511si5mgjttgeanpepj.jpg',
      ),
      7 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385711',
        'filepath' => '201409/22/143511ms117zzh3syd517h.png',
      ),
      8 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1411385711',
        'filepath' => '201409/22/143511m3tjvbtihbvtwbbj.jpg',
      ),
    ),
  ),
  '16 2014 14:27' =>
  array (
    1 =>
    array (
      0 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410877674',
        'filepath' => '201409/16/172754j256inkjg22e7qiv.jpg',
      ),
    ),
  ),
  '16 2014 14:23' =>
  array (
    1 =>
    array (
      0 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410877427',
        'filepath' => '201409/16/172347skr75kzgm76jtokm.jpg',
      ),
    ),
  ),
  '16 2014 06:53' =>
  array (
    1 =>
    array (
      0 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410850427',
        'filepath' => '201409/16/095347a5zdkrddy5jb71b5.jpg',
      ),
    ),
  ),
  '13 2014 12:00' =>
  array (
    1 =>
    array (
      0 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410609615',
        'filepath' => '201409/13/150015s33zk7nhbh30hhs7.jpg',
      ),
    ),
  ),
  '12 2014 09:55' =>
  array (
    1 =>
    array (
      0 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515736',
        'filepath' => '201409/12/125536qfg7fggojojpr7h5.jpg',
      ),
      1 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515736',
        'filepath' => '201409/12/125536hkjedj93wfwyyy1g.jpg',
      ),
      2 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515736',
        'filepath' => '201409/12/125536mzcegegqrzc2zem0.jpg',
      ),
      3 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515736',
        'filepath' => '201409/12/125536m8vf9drkfykwf8gk.jpg',
      ),
      4 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515735',
        'filepath' => '201409/12/125535jpu83v88pq3qqjua.jpg',
      ),
      5 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515735',
        'filepath' => '201409/12/125535h1a1xx1xo6xyz627.jpg',
      ),
      6 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515735',
        'filepath' => '201409/12/125535jb29zd751ba92921.jpg',
      ),
      7 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515735',
        'filepath' => '201409/12/125535kpc93jpn43pbp7bn.jpg',
      ),
      8 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515734',
        'filepath' => '201409/12/125534zp2pap3pdopn1nae.jpg',
      ),
      9 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515734',
        'filepath' => '201409/12/125534c77r1x50rjzz60gh.jpg',
      ),
      10 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515733',
        'filepath' => '201409/12/125533vf2nck157fs57t0p.jpg',
      ),
      11 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515733',
        'filepath' => '201409/12/125533czi7qd4qedz4q56i.jpg',
      ),
      12 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515733',
        'filepath' => '201409/12/125533avoufwve12vnvfey.jpg',
      ),
      13 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515733',
        'filepath' => '201409/12/125533zsskjv70k0zkkoj5.jpg',
      ),
      14 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515733',
        'filepath' => '201409/12/125533at434dvolqrj34j3.jpg',
      ),
      15 =>
      array (
        'realname' => 'Кондратюк Сергей',
        'uid' => '1',
        'dateline' => '1410515732',
        'filepath' => '201409/12/125532ogrjhryjj3dg3r7g.jpg',
      ),
    ),
  ),
)
Вот содержимое массива $picsArr
 
Попробуйте использовать функцию обратного вызова ко всем элементам указанных массивов
array_map
 
Можно поподробнее? что даст использование этой функции?
Вы перебираете массив для внесения в него изменений.
Это можно сделать через обратный вызов функции, которая поменяет значения для всего массива.
 
Вы перебираете массив для внесения в него изменений.
Это можно сделать через обратный вызов функции, которая поменяет значения для всего массива.
Ага, почитал документацию. Не поможете с примером? не понял как эта функция заменит мне циклы
 
Вот то, что тебе нужно, если я правильно понял (из приведённого кода не совсем понятно, что имеем, и что хотим получить)
PHP:
function fun($source, $key)
{
    global $resultArr;
    $uid = $source['uid'];
    $resultArr[$uid]['dateLine'] =  rus_month($source['dateline']);
    $resultArr[$uid]['userFullName'] = $source['realname'];
    $resultArr[$uid]['homeref'] = 'uid'.$source['uid'];
    if (!isset($resultArr[$uid]['pic'])) $resultArr[$uid]['pic'] = [];
    $resultArr[$uid]['pic'][] = 'data/attachment/album/'.$source['filepath'];
  
}
$resultArr = [];

array_walk($picsDataArr, 'fun');
sort($resultArr);
 
Вот то, что тебе нужно, если я правильно понял (из приведённого кода не совсем понятно, что имеем, и что хотим получить)
PHP:
function fun($source, $key)
{
    global $resultArr;
    $uid = $source['uid'];
    $resultArr[$uid]['dateLine'] =  rus_month($source['dateline']);
    $resultArr[$uid]['userFullName'] = $source['realname'];
    $resultArr[$uid]['homeref'] = 'uid'.$source['uid'];
    if (!isset($resultArr[$uid]['pic'])) $resultArr[$uid]['pic'] = [];
    $resultArr[$uid]['pic'][] = 'data/attachment/album/'.$source['filepath'];

}
$resultArr = [];

array_walk($picsDataArr, 'fun');
sort($resultArr);
Из бд получаю список всех фото, в нем uid - номер юзера. дата dateline
есть лента новостей, в ленте надо выводить блоки с фотками как новость. самый первый цикл собирает все фото по блокам. т.е новая минта новый блок


$actualtime = gmdate("d Y H:i",$r['dateline']);// дата + час+минута
$picsArr[$actualtime][$r['uid']][] = $r;// собираем все фото за дата + сортируем по юзерам.

В итоге мне надо вывести блоки с фотками определенного юзера ну и по дате
Для просмотра ссылки Войди или Зарегистрируйся


код выше не подходит, он просто собрал все фото в один массив для одного юзера. нет разделения по дате
 
Из бд получаю список всех фото, в нем uid - номер юзера. дата dateline
есть лента новостей, в ленте надо выводить блоки с фотками как новость. самый первый цикл собирает все фото по блокам. т.е новая минта новый блок


$actualtime = gmdate("d Y H:i",$r['dateline']);// дата + час+минута
$picsArr[$actualtime][$r['uid']][] = $r;// собираем все фото за дата + сортируем по юзерам.

В итоге мне надо вывести блоки с фотками определенного юзера ну и по дате
Для просмотра ссылки Войди или Зарегистрируйся


код выше не подходит, он просто собрал все фото в один массив для одного юзера. нет разделения по дате

Пожалуйста:
PHP:
function fun($source, $key)
{
    global $resultArr;
    $uid = $source['uid'];
    $actualtime = gmdate("d Y H:i",$source['dateline']);
    if (!isset($resultArr[$actualtime])) $resultArr[$actualtime] = [];
    $resultArr[$actualtime][$uid]['dateLine'] =  rus_month($source['dateline']);
    $resultArr[$actualtime][$uid]['userFullName'] = $source['realname'];
    $resultArr[$actualtime][$uid]['homeref'] = 'uid'.$source['uid'];
    if (!isset($resultArr[$actualtime][$uid]['pic'])) $resultArr[$actualtime][$uid]['pic'] = [];
    $resultArr[$actualtime][$uid]['pic'][] = 'data/attachment/album/'.$source['filepath'];

}
$resultArr = [];

array_walk($picsDataArr, 'fun');
 
Последнее редактирование:
Назад
Сверху