У меня есть массив
$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"]++;
Однако у ваших массивов есть несколько особенностей, которые вы должны исправить;
Ни один из них не делает ваш скрипт неработоспособным, но несогласованность и ненужное поражение производительности можно избежать.
Вы можете использовать полностью «функциональный» подход, даже если это 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)
. Вероятно, есть альтернативные функции.