将二维数组中的下标按照数组中指定key的值进行重置

有的时候我们需要将二维数组的下标即0,1,2,3......按照当前二位数组中指定的key重置掉下标, 


比如有以下二维数据结构:

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

我们希望将以上二维数组中的下标即0,1,2,3 被每一个数组中的id重置掉当前二维数组中的下标,即 以上数据结构变成以下结构:

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

实现也很so easy的


完整代码如下:

$arr3 = array(
    array('id' => 10,'status' => 2,'link' => 'qq.com'),
    array('id' => 16,'status' => 1,'link' => 'baidu.com'),
    array('id' => 19,'status' => 3,'link' => '360.com'),
    array('id' => 25,'status' => 3,'link' => 'taobao.com'),
);

$result = [];

foreach($arr3 as $key => $val)
{
    $result[$val['id']] = $val;
}

var_dump($result); //输出的数据结构 就是我们想要的结构


或者也可以直接封装成一个函数,示例如下:

function convert_to_hash_table($arr, $key_field_name)
{
    if(empty($arr)) return false;

    $result = array();

    foreach ($arr as $row)
    {
        if(isset($row[$key_field_name]))
        {
            $result[$row[$key_field_name]] = $row;
        }
    }

    return $result;
}

//调用示例
var_dump(convert_to_hash_table($arr3, 'id')); //输出的数据结构 依然是我们想要的结构,只不过key变成了自己传入的key,灵活性增强了。


PS:分享一个面试小技巧


面试官: 你有什么疑问想问我们吗?

答:可以反问一下 在我刚刚回答的问题中 我哪里的回答您觉得不太满意PS:(因为 我们回答的问题所表达的意思可能和面试官所对你回答的问题的理解不一样 这个时候你可以补救一下的)


骚年 加油吧!   


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

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

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

精彩评论

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