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. shutPROG - 08 Августа, 2013 - 22:40:35 - перейти к сообщению
Доброй ночи.

Есть вопрос.

Существует массив:

PHP:
скопировать код в буфер обмена
  1. Array ( [0] => 274586 [1] => 274589 [2] => 274598 [3] => 274598 [4] => 274598 [5] => 274628 [6] => 274632 [7] => 274632 [8] => 274644 [9] => 274644 [10] => 274647 [11] => 274647 [12] => 274647 [13] => 274647 [14] => 274647 [15] => 274647 [16] => 274647 [17] => 274647 [18] => 274650 [19] => 274650 [20] => 274653 [21] => 274653 [22] => 274659 [23] => 274659 [24] => 276164 [25] => 276320 [26] => 276371 [27] => 276401 [28] => 276425 [29] => 276446 [30] => 276536 [31] => 0 [32] => 0 [33] => 0 [34] => 277303 [35] => 0 [36] => 0 [37] => 0 [38] => 0 [39] => 278753 [40] => 281282 )


необходимо сравнивать и вычитать элементы этого массива [0] -[1] ; [1]-[2]; [2]-[3]... и записать это в новый массив,есть одна идея воспользоваться функцией

array_shift()

и вычесть первый массив из второго, только здесь тоже загвоздка , как вычитать элементы массива из других элементов массива ?)
(Добавление)
И еще вопрос - как получить разницу всех элементов 2 массивов ?
2. Triton682 - 09 Августа, 2013 - 01:43:38 - перейти к сообщению

Цитата:
[0] - [1]; [1] - [2]; [2] - [3]

вычитая таким образом
Спойлер (Отобразить)

что делать с последним элементом массива? из него(из последнего) вычитать нечего будет, тк элементов массива больше не останется.
3. shutPROG - 09 Августа, 2013 - 07:13:40 - перейти к сообщению
Triton682 а последний либо вычитается сам из себя либо обнуляется. в идеале.
4. likvidator - 09 Августа, 2013 - 09:39:30 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $a=Array (274586,274589,274598,274598,274598,274628,274632,274632,274644,274644,274647,274647,274647,274647,274647,274647,274647,274647,274650,274650,274653,274653,274659,274659,276164,276320,276371,276401,276425,276446,276536,0,0,0,277303 ,0,0,0,0,278753,281282 );
  3. $i=-1;
  4. while($i++<sizeof($a)-2){
  5. $n1=$i+1;
  6. $n2=$a[$n1]-$a[$i];
  7. echo "a[$n1]-a[$i]=$n2<br>";}
  8. ?>

плохо представляю зачем это,если что-то не правильно - исправлю
З.Ы. вот и первый косячок))) я сделал вид - [1]-[0];[2]-[1],а надо наоборот:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $a=Array (274586,274589,274598,274598,274598,274628,274632,274632,274644,274644,274647,274647,274647,274647,274647,274647,274647,274647,274650,274650,274653,274653,274659,274659,276164,276320,276371,276401,276425,276446,276536,0,0,0,277303 ,0,0,0,0,278753,281282 );
  3. $i=-1;
  4. while($i++<sizeof($a)-2){
  5. $n1=$i+1;
  6. $n2=$a[$i]-$a[$n1];
  7. echo "a[$i]-a[$n1]=$n2<br>";}
  8. ?>
5. avtor.fox - 09 Августа, 2013 - 10:09:03 - перейти к сообщению
не то решение (Отобразить)
6. EuGen - 09 Августа, 2013 - 10:35:40 - перейти к сообщению
avtor.fox пишет:
$rgValues = [400, 201, 23, 52, 38, 903, 33, 8462, 584];
$rgValues = array_map(function($v){
return isset($v[1]) ? $v[0] - $v[1] : $v[0];
}, array_chunk($rgValues, 2));

Не то, потому как array_chunk разобьёт массив на независимые пары и разность между соседними элементами разных пар вычислена не будет.
Если очень хочется сделать "в одну строку", то можно примерно так:
PHP:
скопировать код в буфер обмена
  1. $rgData   = [15,12,10,15,5,10];
  2. $rgResult = array_map(function($x,$y)
  3. {
  4.    return $x-$y;
  5. }, $rgData, array_merge(array_slice($rgData,1),[$rgData[count($rgData)-1]]));
  6. //var_dump($rgResult);
7. avtor.fox - 09 Августа, 2013 - 10:43:05 - перейти к сообщению
EuGen, да, моя ошибка. Проглядел, что вычитание не парное, а из предыдущего элемента. И одна строка - не панацея в моём случае)
8. shutPROG - 09 Августа, 2013 - 16:26:22 - перейти к сообщению
Спасибо огромное камрады узнал много нового!!!! Правда решение вбрал несколько иное Улыбка Все равно дико благодарен!!!!!

 

Powered by ExBB FM 1.0 RC1