Добавить в значение массива (+1)

У меня есть массив

$hourly = array( "01" => "0", "02" => "0", "03" => "0", "04" => "0", "05" => "0", "06" => "0", "07" => "0", "08" => "0", "09" => "0", "10" => "0", "11" => "0", "12" => "0", "13" => "0", "14" => "0", "15" => "0", "16" => "0", "17" => "0", "18" => "0", "19" => "0", "20" => "0", "21" => "0", "22" => "0", "23" => "0" ); 

И у меня есть куча данных типа «01» и «03» и «21», и я хочу добавить (+1) к этому конкретному значению в массиве. Таким образом, с набором данных «01», «03», «21», «01», «22» результирующий массив будет

 $hourly = array( "01" => "2", "02" => "0", "03" => "1", "04" => "0", "05" => "0", "06" => "0", "07" => "0", "08" => "0", "09" => "0", "10" => "0", "11" => "0", "12" => "0", "13" => "0", "14" => "0", "15" => "0", "16" => "0", "17" => "0", "18" => "0", "19" => "0", "20" => "0", "21" => "1", "22" => "1", "23" => "0" ); 

Как я мог это сделать? Есть ли функция добавить 1 к элементу массива?

 $hours = array("01", "03", "21" ); foreach($hours as $hour) { $hourly[$hour] += 1; } 
 $updates = array("01","03","21","01","22"); foreach($updates as $num) { $hourly[$num]++; } 

Обычно вы сможете:

 $array["key"]++; 

Однако у ваших массивов есть несколько особенностей, которые вы должны исправить;

  • Значения ключевых слов – это строки. Если вам нужны номера, которые вы можете увеличить, вы должны использовать цифры с самого начала. Если вы храните строку и увеличиваете ее с помощью синтаксиса выше, она будет превращена в целое число.
  • Массивы хранят строку или цифры в виде ключей. Вы используете оба. «01» будет сохранен в виде строкового ключа, «10» будет сохранен в виде числа. Рассмотрите возможность хранения только чисел в виде ключей.

Ни один из них не делает ваш скрипт неработоспособным, но несогласованность и ненужное поражение производительности можно избежать.

Вы можете использовать полностью «функциональный» подход, даже если это PHP и даже id его не очень красиво 😉 Но он работает (PHP> = 5.3.0):

 ... $fr = 1; $to = 23; # generate original Array $hourly = array_combine( array_map( function($n){return sprintf("%02s",$n);}, range($fr,$to) ), # Keys array_map( function($n){return 0;}, range($fr,$to) ) # Values ); $updates = Array('01','03','21','01','22'); # update values based on keys found in $updates array_walk( $updates, function($u){global $hourly; $hourly[$u]++;} ); ... 

С уважением

БВ

Если вы просто хотите увеличить каждый элемент в массиве, вы можете использовать:

 <?php foreach($hourly as &$element) { $element++; } ?> 

Однако, если вы хотите только увеличивать элементы, содержащие значение, вы можете использовать:

 <?php foreach($hourly as &$element) { $element = $element ? $element + 1 : $element; } ?> 

Вы можете построить массив с обновленной информацией ( $new = array('01' => '02','03' => '01',) т. Д., А затем использовать array_replace($hourly,$new) или array_merge($hourly,$new) . Вероятно, есть альтернативные функции.