Как сопоставить ключи массива и вставить значения в новый массив?

У меня есть массив под названием $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, а не оставлены неопределенными), но я полагаю, у вас есть свои причины.

Другие вопросы по тегам