Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: оптимизация кода
Форумы портала PHP.SU » » Вопросы новичков » оптимизация кода

Страниц (1): [1]
 

1. AskhsiV - 09 Октября, 2011 - 13:19:48 - перейти к сообщению
ребята.. товарищи.. господа.. Люди!

поможите вобщем)
уже больше часа медитирую на участок кода и не знаю как его оптимизировать, но и оставить его так совесть не позволяет(

короче, вот такое полотенце:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($array as $k => $v) {
  3.   if($k == 'aaa' && $v == 1) { $zzz[] = 1; }
  4.   if($k == 'aaa' && $v == 2) { $zzz[] = 2; }
  5.   if($k == 'bbb' && $v == 1) { $zzz[] = 3; }
  6.   if($k == 'bbb' && $v == 2) { $zzz[] = 4; }
  7.   if($k == 'ccc' && $v == 1) { $zzz[] = 5; }
  8.   if($k == 'ccc' && $v == 2) { $zzz[] = 6; }
  9.   if($k == 'ddd' && $v == 1) { $zzz[] = 7; }
  10.   if($k == 'ddd' && $v == 2) { $zzz[] = 8; }
  11. }
  12.  
2. SAD - 09 Октября, 2011 - 13:33:17 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. if ($k == 'aaa') {
  2.     $zzz[] = ($v%2==0)?2:1;
  3. }
3. AskhsiV - 09 Октября, 2011 - 13:43:01 - перейти к сообщению
SAD это помогает сократить код вдвое:
PHP:
скопировать код в буфер обмена
  1.  
  2. foreach($array as $k => $v) {
  3.   if($k == 'aaa') { $zzz[] = ($v%2==0)?2:1; }
  4.   if($k == 'bbb') { $zzz[] = ($v%2==0)?4:3; }
  5.   if($k == 'ccc') { $zzz[] = ($v%2==0)?6:5; }
  6.   if($k == 'ddd') { $zzz[] = ($v%2==0)?8:7; }
  7. }
  8.  


а возможно ли ещё оптимизировать, ведь значений ключа может быть больше
4. SAD - 09 Октября, 2011 - 13:45:50 - перейти к сообщению
AskhsiV пишет:
ведь значений ключа может быть больше


так может обрисуете ситуацию в целом? чего гадать то
5. AskhsiV - 09 Октября, 2011 - 14:39:37 - перейти к сообщению
цель - сбор ошибок при импорте некоего списка из файла в БД.
в каждой линии есть несколько полей, пока что 4 (aaa, bbb, ccc, ddd).
у каждого поля есть два типа ошибок, критичная ($v == 1) и нет ($v == 2).
в массив $zzz собираем все ошибки с этого ряда, для дальнейшего отображения.
6. OrmaJever - 09 Октября, 2011 - 17:03:17 - перейти к сообщению
Незнаю насколько работоспособно, но вот так
PHP:
скопировать код в буфер обмена
  1. $arr = array('aaa' => 0, 'bbb' => 2, 'ccc' => 4, 'ddd' => 6);
  2. foreach($array as $k => $v) $zzz[] = $arr[$k] + $v;
7. AskhsiV - 09 Октября, 2011 - 19:27:30 - перейти к сообщению
OrmaJever спасибо! то, что надо, даже даёт возможность регулировать кол-во ошибок для каждого поля)

 

Powered by ExBB FM 1.0 RC1