2013-05-10 39 views
0

我有一個數組:如何做計算在陣列中

Array 
(
    [0] => Array 
    (
     [batch_id] => 1 
     [seq_id] => 1 
     [q_id] => 2046 
     [a1] => 0 
     [a2] => 1 
     [a3] => 2 
     [a4] => 3 
     [a5] => 4 

) 
) 

我需要減去由1個

慾望結果的A1-A5的值(例如A1):

array(4) { 
["w_id"]=> 
string(5) "99911" 
["q_id"]=> 
string(4) "2046" 
["c_id"]=> 
string(6) "a1" 
["rank"]=> 
int(1) "-1" 
} 

我的代碼如下:

$result = mysql_query("Select * from table_1");  
while($cr = mysql_fetch_array($result)){  
    $rr_id = $cr['batch_id'].$cr['seq_id']; 
    $rid = '999'.$rr_id; 
      $q_id = $cr['q_id']; 
    foreach ($cr as $k => $v){ 
    if(preg_match('{^a\d+$}',$k)){ 
    $new_insert[] = array(
     'w_id'=>$rid, 
     'q_id' =>$q_id, 
     'c_id' =>$k, 
     'rank'=>$v-1 
); 
    } 
    } 

Howeve R,排名的結果變成

array(4) { 
["w_id"]=> 
string(5) "99911" 
["q_id"]=> 
string(4) "2046" 
["c_id"]=> 
string(6) "a1" 
["rank"]=> 
int(0) 
} 

無法顯示排名

我的代碼的任何問題的價值?誰能回答我的問題非常感謝你

+2

爲什麼這個標記爲'mysql'? – Aquillo 2013-05-10 09:14:59

+0

什麼是$ cr初始化? – simpleuser 2013-05-10 09:15:54

+0

這沒有任何意義.. – billyonecan 2013-05-10 09:16:32

回答

2

您可以使用:

$data = array_map(function ($v) { 
    foreach($v as $k => &$x) { 
     if (preg_match('{^a\d+$}', $k)) { 
      $x = $x - 1; 
     } 
    } 
    return $v; 
}, $data); 

print_r($data); 

Live Demo

+0

由於數組可能包含null,例如[a1] => null,所以我添加一個條件if($ x == null){$ x = $ X;如果值爲0(例如[a1] => 0),那麼輸出將變爲[a1] => 0且不爲-1。如果它爲空我怎麼能傳遞空值,因爲我需要稍後將它插入到MySQL。 [Live Demo](http://eval.in/28296) – user2210819 2013-05-13 04:12:22

+0

我使用的是php5.2.1,不可能使用array_map的內聯匿名函數嗎? – user2210819 2013-05-13 06:38:48

+0

爸爸你能幫幫我嗎? – user2210819 2013-05-14 06:53:48

0

只需使用循環和預遞減

foreach($cr as $k=>&$v) 
{ 
--$v['a1'];--$v['a2'];--$v['a3'];--$v['a4'];--$v['a5']; 
} 

print_r($cr); 
1
preg_match('{^Item \d+$}',$k) 

你已經有了內部的preg_match錯誤的花樣(你正在尋找的關鍵是 'A1', 'A2' ...不是 '項目1', '項目2' ...) ,請使用這一個:

preg_match('{^a\d+$}',$k) 
0

我使用$ cr作爲你的數組。

$cr[] = array("batch_id"=>1, "seq_id"=>1, "q_id"=>'2046', "a1"=>1,"a2"=>1,"a3"=>1,"a4"=>1,"a5"=>1); 

foreach($cr as $k=>&$v){ 
    $v['a1'] = $v['a1'] - 1; 
    $v['a2'] = $v['a2'] - 1; 
    $v['a3'] = $v['a3'] - 1; 
    $v['a4'] = $v['a4'] - 1; 
    $v['a5'] = $v['a5'] - 1; 
} 
print_r($cr); 
+0

' - $ v ['a1' ]'不容易? :) – Robert 2013-05-28 11:12:11

+0

是的..這很容易。 :-) – cha 2013-05-28 11:36:16