从二维数组中获取指定的key->value

有时候我们得到的数据结构如下:

array (size=4)
  0 => 
    array (size=3)
      'article_id' => int 10
      'status' => int 2
      'link' => string 'qq.com' (length=6)
  1 => 
    array (size=3)
      'article_id' => int 16
      'status' => int 1
      'link' => string 'baidu.com' (length=9)
  2 => 
    array (size=3)
      'article_id' => int 11
      'status' => int 3
      'link' => string '360.com' (length=7)
  3 => 
    array (size=3)
      'article_id' => int 16
      'status' => int 3
      'link' => string 'taobao.com' (length=10)

因为某些场景需要,我们需要获取以上数组中的status和link并返回一个由status和link组成的新二维数组。status和link组成的新二维数组结构如下:

array (size=4)
  0 => 
    array (size=2)
      'status' => int 2
      'link' => string 'qq.com' (length=6)
  1 => 
    array (size=2)
      'status' => int 1
      'link' => string 'baidu.com' (length=9)
  2 => 
    array (size=2)
      'status' => int 3
      'link' => string '360.com' (length=7)
  3 => 
    array (size=2)
      'status' => int 3
      'link' => string 'taobao.com' (length=10)

实现以上数组结构 有人说可以在foreach里面一个一个unset()掉,但如果要删除的数组元素很多。。unset()显然不方便,且代码量还多。

除了上面说的unset还有什么方法吗? 我们可以自定义一个函数来实现

完整代码上场:

$arr = array(
    array('article_id' => 10,'status' => 2,'link' => 'qq.com'),
    array('article_id' => 16,'status' => 1,'link' => 'baidu.com'),
    array('article_id' => 11,'status' => 3,'link' => '360.com'),
    array('article_id' => 16,'status' => 3,'link' => 'taobao.com'),
);

$arr2 = array('status','link');


/**
 * 从二维数组中获取指定的key->value
 * @author xiaozhou
 * @param  array $arr     从该数组中获取(二维数组)
 * @param  array $key_arr 从$arr数组中获取$key_arr中的key->value
 * @return array 返回一个二维数组
 */
function get_arr($arr,$key_arr)
{
    $result = [];

    foreach($arr as $key => $val)
    {
        foreach($key_arr as $k => $v)
        {
            $result[$key][$v] = $val[$v];
        }
    }

    return $result;
}

var_dump(get_arr($arr,$arr2)); //以上就是我们要的二维数组结构了




PS:

大胆走出舒适区是一种挑战,也是一种成长。学着去尝试,学着清除自己给自己设定的条条框框,接触没有接触过的人,做一些以前不敢做的事,在尝试新事物的过程中,你会收获不一样的力量。


声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

精彩评论

全部回复12人评论7,777人参与