有这样一个数组$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的值组成一个新的一维数组。

解决方案 »

  1.   

    $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)
                    )
            )
    );
    function cc($w){return $w["id"];}$b = array_map("cc", $ifok['ok']['yes']);
    var_dump($b);
      

  2.   

    这个效率应该比foreach高一点吧,毕竟是php内置的循环.
      

  3.   

    array_keys -- 返回数组中所有的键名
    each --  返回数组中当前的键/值对并将数组指针向前移动一步 
    这两个函数都可以实现,第一个较省事,第二个更强大
      

  4.   

    想当然了吧,,,打印看看foreach效率快不
    $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 />';
      

  5.   

    另类写法
    $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
    )
      

  6.   


    原来序列化可以把数组变字串,一直没想到,老是研究怎么把print_r输出字串,呵呵,受教了
      

  7.   


    没去研究过,我上面所说的也是大概这个意思除非数组极度庞大,否则研究优化没太大意义,还不如把代码写简单点让结构明瞭所以说没太大区别,之前写的array_map只是寻求新思路,循环人人都会写,呵呵一直在想array2string的思路,因为这样可以用正则把$arr[a][b][c]变成$arr[c][b][a] ($key不重复的情况下),这样可以在某些时候减少循环嵌套……真的谢谢老大给出的方法!!!!!!!!!!