Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何匹配数组键并在新数组中插入值?_Php_Arrays_Associative Array_Array Key - Fatal编程技术网

Php 如何匹配数组键并在新数组中插入值?

Php 如何匹配数组键并在新数组中插入值?,php,arrays,associative-array,array-key,Php,Arrays,Associative Array,Array Key,我有一个名为$transaction\u count的数组,如下所示: Array ( [0] => Array ( [transaction_status] => success [StatusCount] => 25 ) [1] => Array ( [transaction_status] => inprocess

我有一个名为
$transaction\u 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
        )    
)
$failed_transaction_count = 10

$cancelled_transaction_count = 25
上面的数组是动态生成的,因此可以根据触发的查询更改数组键,即0,1,2,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\u count
如下所示:

Array
        (

        [0] => Array
            (
                [transaction_status] => fail
                [StatusCount] => 10

            )


        [1] => Array
            (
               [transaction_status] => cancelled
               [StatusCount] => 25
            )    
    )
因此,在上述情况下,应按如下方式设置值:

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
        )    
)
$failed_transaction_count = 10

$cancelled_transaction_count = 25
另外两个变量不应设置,因为不存在匹配键

如何正确设置变量的值

试试这个

$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>";
}

请注意,我宁愿将所有状态计数设置为0(即未明确计数的状态计数设置为0,而不是未定义的状态计数),但我认为您有自己的理由。

我没有否决您的意见,但我仍然认为这个答案不太理想。您可以轻松地对代码进行分解,并使用函数,而不是将所有这些代码放在顶层。不管怎么说,OP似乎抓住了他的答案就跑开了,所以这并不十分重要。