Как сопоставить ключи массива и вставить значения в новый массив?
У меня есть массив под названием $transaction_count
следующее:
Array
(
[0] => Array
(
[transaction_status] => success
[StatusCount] => 25
)
[1] => Array
(
[transaction_status] => inprocess
[StatusCount] => 5
)
[2] => Array
(
[transaction_status] => cancelled
[StatusCount] => 66
)
[3] => Array
(
[transaction_status] => fail
[StatusCount] => 0
)
)
Вышеуказанный массив генерируется динамически, поэтому ключи массива, т. Е.0,1,1,3, могут быть изменены в зависимости от запроса. То есть массив может принимать следующую или любую другую форму:
Array
(
[0] => Array
(
[transaction_status] => inprocess
[StatusCount] => 5
)
[1] => Array
(
[transaction_status] => fail
[StatusCount] => 0
)
)
Теперь я хочу установить следующие четыре значения переменных на основе условия.
$success_transaction_count, $inprocess_transaction_count, $cancelled_transaction_count, $failed_transaction_count
Например, если массив $transaction_count
как показано ниже:
Array
(
[0] => Array
(
[transaction_status] => fail
[StatusCount] => 10
)
[1] => Array
(
[transaction_status] => cancelled
[StatusCount] => 25
)
)
Таким образом, в приведенном выше случае значения должны быть установлены следующим образом:
$failed_transaction_count = 10
$cancelled_transaction_count = 25
и две другие переменные не должны быть установлены, так как нет соответствующих ключей.
Как правильно установить значения переменных?
2 ответа
Попробуй это
$success_transaction_count=0;
$inprocess_transaction_count=0;
$cancelled_transaction_count=0;
$failed_transaction_count=0;
foreach($$transaction_count as $arr)
{
if($arr['transaction_status']=='success')
{
$success_transaction_count += $arr['StatusCount'];
}
else if($arr['transaction_status']=='inprocess')
{
$inprocess_transaction_count += $arr['StatusCount'];
}
else if($arr['transaction_status']=='cancelled')
{
$cancelled_transaction_count += $arr['StatusCount'];
}
else if($arr['transaction_status']=='fail')
{
$failed_transaction_count += $arr['StatusCount'];
}
}
Если я правильно понял, что вы хотите, это может сработать:
$transaction_count = array(
array ("transaction_status" => "failed", "StatusCount" => 10),
array ("transaction_status" => "cancelled", "StatusCount" => 25));
function set_counts ($input)
{
foreach ($input as $pair)
{
// get back count for a given type
$type = $pair["transaction_status"];
$count = $pair["StatusCount"];
// set the corresponding variable
$var_name = $type."_transaction_count";
global $$var_name;
$$var_name = $count;
}
}
set_counts ($transaction_count);
foreach (array("success", "inprocess", "cancelled", "failed") as $type)
{
$var_name = $type."_transaction_count";
$value = isset($$var_name) ? $$var_name : "not set";
echo "$var_name: $value<br>";
}
выход:
success_transaction_count: not set
inprocess_transaction_count: not set
cancelled_transaction_count: 25
failed_transaction_count: 10
Обратите внимание, что я бы предпочел, чтобы все счетчики состояний были установлены (т. Е. Счетчики, которые не были явно подсчитаны, были установлены в 0, а не оставлены неопределенными), но я полагаю, у вас есть свои причины.