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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вычитание элементов массива

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Сравнение элементов массива и последующее их вычитание
shutPROG
Отправлено: 08 Августа, 2013 - 22:40:35
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Доброй ночи.

Есть вопрос.

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

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 массивов ?

(Отредактировано автором: 08 Августа, 2013 - 22:41:12)

 
 Top
Triton682
Отправлено: 09 Августа, 2013 - 01:43:38
Post Id


Новичок


Покинул форум
Сообщений всего: 22
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)





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

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

что делать с последним элементом массива? из него(из последнего) вычитать нечего будет, тк элементов массива больше не останется.

(Отредактировано автором: 09 Августа, 2013 - 01:51:50)

 
 Top
shutPROG
Отправлено: 09 Августа, 2013 - 07:13:40
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Triton682 а последний либо вычитается сам из себя либо обнуляется. в идеале.
 
 Top
likvidator
Отправлено: 09 Августа, 2013 - 09:39:30
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


Помог: 4 раз(а)

[+]


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. ?>

(Отредактировано автором: 09 Августа, 2013 - 09:43:53)

 
 Top
avtor.fox
Отправлено: 09 Августа, 2013 - 10:09:03
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




не то решение (Отобразить)

(Отредактировано автором: 09 Августа, 2013 - 10:43:52)

 
 Top
EuGen Администратор
Отправлено: 09 Августа, 2013 - 10:35:40
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




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);


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
avtor.fox
Отправлено: 09 Августа, 2013 - 10:43:05
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




EuGen, да, моя ошибка. Проглядел, что вычитание не парное, а из предыдущего элемента. И одна строка - не панацея в моём случае)
 
 Top
shutPROG
Отправлено: 09 Августа, 2013 - 16:26:22
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Спасибо огромное камрады узнал много нового!!!! Правда решение вбрал несколько иное Улыбка Все равно дико благодарен!!!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB