2014-02-04 3 views
0

Я массив с именем $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 
     )  
) 

выше массив получает генерируется динамически, так ключи массива i.e.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_count, как показано ниже:

Array 
     (

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

      ) 


     [1] => Array 
      (
       [transaction_status] => cancelled 
       [StatusCount] => 25 
      )  
    ) 

Таким образом, в описанном выше случае значения должны получить набор следующим образом:

$failed_transaction_count = 10 

$cancelled_transaction_count = 25 

и две другие переменные не должны получить если нет ключей матирования.

Как правильно задать значения переменных?

ответ

-1

попробовать это

$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']; 
    } 
} 
+0

why downvote mr. downvoter? –

+0

Я не спустил вас вниз, но все же я думаю, что этот ответ субоптимален. Вы можете легко кодировать код и использовать функцию вместо того, чтобы поместить весь этот глобус кода в верхний уровень. Во всяком случае, ОП, похоже, схватил его ответ и сбежал, так что это не очень важно. –

1

Если я понял, что вы хотите правильно, это может работать:

$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 

Обратите внимание, что я предпочел бы все отсчеты состояния set (т. е. те, которые явно не подсчитываются, равны 0, а не левые неопределенные), но я полагаю, что у вас есть ваше reaso нс.

Смежные вопросы