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似乎抓住了他的答案就跑开了,所以这并不十分重要。