PDA

View Full Version : سوال: جمع کردن مقادیر آرایه در php



amin7x
جمعه 15 اردیبهشت 1396, 12:45 عصر
سلام دوستان
من چطوری میتونم فیلدهای Ted که دارای یک Code همسان هستند رو جمع کنم؟



array(
array(
'Code' => 1,
'Ted' => 1.2
),
array(
'Code' => 1,
'Ted' => 4.5
),
array(
'Code' => 2,
'Ted' => 3
),
array(
'Code' => 2,
'Ted' => 2
),
array(
'Code' => 3,
'Ted' => 1
),
array(
'Code' => 3,
'Ted' => 5.5
),
array(
'Code' => 4,
'Ted' => 3.25
),
array(
'Code' => 4,
'Ted' => 4
),
array(
'Code' => 5,
'Ted' => 2
),
array(
'Code' => 5,
'Ted' => 1
)
);


به طور مثال جمع کردن Ted هایی که دارای Code 1 هستند که میشه 5.7

amirhossein.sh
جمعه 15 اردیبهشت 1396, 13:57 عصر
<?php
$arrays = array(
array(
'Code' => 1,
'Ted' => 1.2
),
array(
'Code' => 1,
'Ted' => 4.5
),
array(
'Code' => 2,
'Ted' => 3
),
array(
'Code' => 2,
'Ted' => 2
),
array(
'Code' => 3,
'Ted' => 1
),
array(
'Code' => 3,
'Ted' => 5.5
),
array(
'Code' => 4,
'Ted' => 3.25
),
array(
'Code' => 4,
'Ted' => 4
),
array(
'Code' => 5,
'Ted' => 2
),
array(
'Code' => 5,
'Ted' => 1
)
);
$code_array = array();
foreach ($arrays as $array) {
if(!in_array($array['Code'] , $code_array)) {
$code_array[] = $array['Code'];
}
}
$sum = array();
foreach ($code_array as $code) {
foreach ($arrays as $array) {
if($array['Code'] == $code) {
@$sum['Code = ' . $code] += $array['Ted'];
}
}
}
var_dump($code_array);
var_dump($sum);
?>

اگه نیاز به توضیح بود بگو برات توضیح بدم.
بدون شک روش های بهترین از این هم هست که دوستان پیشنهاد کنن اینو فقط به عنوان یکی از روش ها در نظر بگیر

amin7x
جمعه 15 اردیبهشت 1396, 15:18 عصر
<?php
$arrays = array(
array(
'Code' => 1,
'Ted' => 1.2
),
array(
'Code' => 1,
'Ted' => 4.5
),
array(
'Code' => 2,
'Ted' => 3
),
array(
'Code' => 2,
'Ted' => 2
),
array(
'Code' => 3,
'Ted' => 1
),
array(
'Code' => 3,
'Ted' => 5.5
),
array(
'Code' => 4,
'Ted' => 3.25
),
array(
'Code' => 4,
'Ted' => 4
),
array(
'Code' => 5,
'Ted' => 2
),
array(
'Code' => 5,
'Ted' => 1
)
);
$code_array = array();
foreach ($arrays as $array) {
if(!in_array($array['Code'] , $code_array)) {
$code_array[] = $array['Code'];
}
}
$sum = array();
foreach ($code_array as $code) {
foreach ($arrays as $array) {
if($array['Code'] == $code) {
@$sum['Code = ' . $code] += $array['Ted'];
}
}
}
var_dump($code_array);
var_dump($sum);
?>

اگه نیاز به توضیح بود بگو برات توضیح بدم.
بدون شک روش های بهترین از این هم هست که دوستان پیشنهاد کنن اینو فقط به عنوان یکی از روش ها در نظر بگیر

ممنون و ممنون میشم توضیح هم بدید.

amirhossein.sh
جمعه 15 اردیبهشت 1396, 15:59 عصر
ممنون و ممنون میشم توضیح هم بدید.

اول اومدم یه آرایه خالی درست کردم و اونو به متغییر code_array انتساب کردم
بعد یه دستور foreach گذاشتم تا داخل آرایه $arrays وارد بشم
داخل این foreach میام بررسی میکنم که آیا مقدار ایندکس code هر کدوم از آرایه هایی که داخل $arrays هستن وارد آرایه code_array شده یا نه ؟
این کارو برای این انجام میدم که از اضافه شدن Code های تکراری جلوگیری کنه من تو این مرحله هدفم اینه که بیام code های متفاوتی که تو $arrays به کار رفته پیدا کنم مثلا تو $arrays ما دو تا آرایه داریم که code => 2 داره ، من نمیخوام که تو $code_array دو بار بیاد 2 رو بنویسه واسه همین اون شرطو گذاشتم

وقتی code_array پُر شد حالا نوبت این میشه که دوباره وارد $arrays بشیم و این دفعه بریم سراغ اون اون آرایه هایی که code => x هست ، این x در واقع همون مقادیری هست که ما تو code_array داریم ، میریم تمام اون ارایه هایی که code های یکسان دارند رو پیدا میکنیم و مقدار اندیسTed اونارو وارد یه آرایه جدید $sum میکنیم که اندیس هر کدوم از این متغییر هایی که تو آرایه sum هست code رو نشون میده و مقدارشون هم جمع کل tedهارو