我正在使用php 5.2.10我想在数组上做array_map并且我为数组映射创建了一个函数
function get_result(){
$result = mysql_query("Select * from table");
while($cr = mysql_fetch_array($result)){
$b = array_map(`calc`,$cr);
$rr_id = $cr['batch_id'].$cr['seq_id'];
$mqrrid = '999'.$rr_id;
$question_id = $cr['question_id'];
foreach ($b as $k => $v){
if(preg_match('{^Item \d+$}',$k)){
$new_insert[] = array(
'r_id'=>$mqrrid,
'q_id' =>$q_id,
'c_id' =>$k,
'rank'=>$v
);
}
}
}
}
function calc($n){
foreach($n as $m=> &$x) {
if (preg_match('{^Item \d+$}', $m)) {
if($x == null){
$x = $x;
}else {
$x = $x - 1;
}
}
}
return $n;
}
我不知道为什么我不能在calc
中调用函数array_map
.....我无法弄清楚原因.....
谁能帮我 ?
原始数组:(实际上array_map(calc
,$ cr之后的输出)与以下相同)
array(23) {
["batch_id"]=>
string(1) "1"
["seq_id"]=>
string(1) "1"
["question_id"]=>
string(4) "2086"
["Item 1"]=>
string(1) "1"
["Item 2"]=>
string(1) "2"
["Item 3"]=>
string(1) "3"
["Item 4"]=>
string(1) "4"
["Item 5"]=>
string(1) "5"
["Item 6"]=>
NULL
我需要的是:(减去第1项到第6项的值,如果它的null只是留下它〜)
array(23) {
["batch_id"]=>
string(1) "1"
["seq_id"]=>
string(1) "1"
["q_id"]=>
string(4) "2086"
["Item 1"]=>
string(1) "0"
["Item 2"]=>
string(1) "1"
["Item 3"]=>
string(1) "2"
["Item 4"]=>
string(1) "3"
["Item 5"]=>
string(1) "4"
["Item 6"]=>
NULL
最后,结果将如下所示:(第1项和第6项的例子)
array(4) {
["r_id"]=>
string(5) "99911"
["q_id"]=>
string(4) "2086"
["c_id"]=>
string(6) "Item 1"
["rank"]=>
string(1) "0"
}
array(4) {
["r_id"]=>
string(5) "99916"
["q_id"]=>
string(4) "2086"
["c_id"]=>
string(6) "Item 6"
["rank"]=>
string(4) NULL
}
答案 0 :(得分:3)
calc
应该是全局的,否则无法找到。此外,你应该传递一个字符串(没有',而是包含在'或'中)。
此外,一般情况下(如果您使用的是PHP 5.3),最好将函数引用传递给array_map函数,而不是字符串:
$func = function calc() { ... }
array_map($func, $cr);
答案 1 :(得分:1)
我认为您不必为array_map
准备函数。
function get_result($link_identifier = NULL) {
$result = mysql_query('Select * from table', $link_identifier);
$new = array();
while ($rows = mysql_fetch_assoc($result)) {
$r_id = '999' . $rows['batch_id'] . $rows['seq_id'];
foreach ($rows as $k => $v) {
if ($v !== null && preg_match('@^Item \\d+$@', $k)) {
$v = (string)((int)$v + 1);
}
$new[] = array(
'r_id' => $r_id,
'q_id' => $rows['question_id'],
'c_id' => $k,
'rank' => $v,
);
}
}
return $new;
}