有这样一个数组$ifok=Array
(
[ok] => Array
(
[yes] => Array
(
[0] => Array
(
[id] => 1
[volume] => 569
) [1] => Array
(
[id] => 2
[volume] => 947
)
[2] => Array
(
[id] => 6
[volume] => 569
) [3] => Array
(
[id] => 12
[volume] => 947
)
[4] => Array
(
[id] => 34
[volume] => 569
) [5] => Array
(
[id] => 67
[volume] => 947
) ) )
)
我想从中取出$ifok['yes'][1...5...N]['id']的值,也就是取出全部id的值组成一个新的一维数组。
(
[ok] => Array
(
[yes] => Array
(
[0] => Array
(
[id] => 1
[volume] => 569
) [1] => Array
(
[id] => 2
[volume] => 947
)
[2] => Array
(
[id] => 6
[volume] => 569
) [3] => Array
(
[id] => 12
[volume] => 947
)
[4] => Array
(
[id] => 34
[volume] => 569
) [5] => Array
(
[id] => 67
[volume] => 947
) ) )
)
我想从中取出$ifok['yes'][1...5...N]['id']的值,也就是取出全部id的值组成一个新的一维数组。
(
'ok' => Array
(
'yes' => Array
(
0 => Array('id' => 1,'volume' => 569),
1 => Array('id' => 2,'volume' => 947),
2 => Array('id' => 6,'volume' => 569),
3 => Array('id' => 12,'volume' => 947),
4 => Array('id' => 34,'volume' => 569),
5 => Array('id' => 67,'volume' => 947)
)
)
);
function cc($w){return $w["id"];}$b = array_map("cc", $ifok['ok']['yes']);
var_dump($b);
each -- 返回数组中当前的键/值对并将数组指针向前移动一步
这两个函数都可以实现,第一个较省事,第二个更强大
$ifok=Array
(
'ok' => Array
(
'yes' => Array
(
0 => Array('id' => 1,'volume' => 569),
1 => Array('id' => 2,'volume' => 947),
2 => Array('id' => 6,'volume' => 569),
3 => Array('id' => 12,'volume' => 947),
4 => Array('id' => 34,'volume' => 569),
7 => Array('id' => 67,'volume' => 947)
)
)
);
$start = gettimeofday(true);
for($i=0;$i<100000;$i++)
{
$b = array();
foreach($ifok['ok']['yes'] AS $k=>$v)
{
$b[$k] = $v['id'];
}
}
$end = gettimeofday(true);
echo $end - $start, '<br />';
function cc($w){return $w["id"];}
for($i=0;$i<100000;$i++)
{
$b = array_map("cc", $ifok['ok']['yes']);
}
echo gettimeofday(true) - $end, '<br />';
$ifok=Array
(
'ok' => Array
(
'yes' => Array
(
0 => Array('id' => 1,'volume' => 569),
1 => Array('id' => 2,'volume' => 947),
2 => Array('id' => 6,'volume' => 569),
3 => Array('id' => 12,'volume' => 947),
4 => Array('id' => 34,'volume' => 569),
7 => Array('id' => 67,'volume' => 947)
)
)
);
$s = serialize($ifok);
preg_match_all('/"id";i:(\d+)/', $s, $r);
print_r($r[1]);Array
(
[0] => 1
[1] => 2
[2] => 6
[3] => 12
[4] => 34
[5] => 67
)
原来序列化可以把数组变字串,一直没想到,老是研究怎么把print_r输出字串,呵呵,受教了
没去研究过,我上面所说的也是大概这个意思除非数组极度庞大,否则研究优化没太大意义,还不如把代码写简单点让结构明瞭所以说没太大区别,之前写的array_map只是寻求新思路,循环人人都会写,呵呵一直在想array2string的思路,因为这样可以用正则把$arr[a][b][c]变成$arr[c][b][a] ($key不重复的情况下),这样可以在某些时候减少循环嵌套……真的谢谢老大给出的方法!!!!!!!!!!