Может кто-нибудь объяснить / аннотировать этот фрагмент Ruby с комментариями? - PullRequest
1 голос
/ 12 мая 2010

Пожалуйста, объясните этот код Ruby, чтобы я мог преобразовать его в PHP:

data = Hash.new({})
mysql_results.each { |r| data[r['year']][r['week']] = r['count'] }

(year_low..year_high).each do |year|
  (1..52).each do |week|
   puts "#{year} #{week} #{data[year][week]}"
  end
end

Ответы [ 3 ]

6 голосов
/ 12 мая 2010
data = Hash.new({})
# create hash 'data'
mysql_results.each { |r| data[r['year']][r['week']] = r['count'] }
# maps each row from sql query to hash like this: data[2010][30] = 23
# So you can access 'count' from every year and week in very simple way

(year_low..year_high).each do |year|
# for (year = year_low; year <= year_high; year++) 
  (1..52).each do |week|
  # for (week = 1; week <=52; week++)
   puts "#{year} #{week} #{data[year][week]}"
   # printf("%d %d %d\n", year, week, data[year][week]);
  end
end

Извините за смешивание C с псевдокодом, но я надеюсь, что это поможет!

1 голос
/ 12 мая 2010

Первый бит просто формирует массив следующим образом:

$data[2009][17] = 10;

PHP эквивалент этого будет:

foreach ($mysql_results as $r){
  $data[$r['year']][$r['week']] = $r['count'];
}

Вторая часть будет соответствовать следующему:

foreach(range($year_low, $year_high) as $year){
  foreach(range(1, 52) as $week){
    print $year.' '.$week.' '.$data[$year][$week]
  }
}

Надеюсь, это поможет:)

0 голосов
/ 12 мая 2010
$data = array();

#Build an array of 'count' per year/week
foreach($mysql_results as $r) {
    $data[$r['year']][$r['week']] = $r['count'];
}

#Loop through the $data variable, printing out the 'count' for each year in the array,
#and all 52 weeks that year
for($year = $year_min; $year <= $year_max; $year++) {
    for($week=1; $week<=52; $week++) {
        echo "$year $week {$data[$year][$week]}";
    }
}

Обратите внимание, что year_low и year_high - переменные, неопределенные в текущем фрагменте, но они должны быть вам известны.

Кроме того, $ mysql_results должен быть массивом, содержащим все строки, возвращаемые базой данных.

Короче говоря, следующий код делает это:

  • Создайте массив, сгруппированный по годам, а затем по неделям, содержащий значение 'count'
  • Перебрать этот массив, отображая по порядку год, неделю и значение для счетчика, если оно есть
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...