是否可以为db的assoc结果设置密钥?

时间:2014-08-20 12:44:40

标签: php laravel

从db获取结果时,是否可以设置将成为数组中键的字段名?列出方法不合适,因为有超过1个值。

基本上我有:

array(4) {
  [0]=>
  array(3) {
    ["DevID"]=>
    string(6) "448805"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
  [1]=>
  array(3) {
    ["DevID"]=>
    string(6) "487195"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
  [2]=>
  array(3) {
    ["DevID"]=>
    string(6) "487732"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
  [3]=>
  array(3) {
    ["DevID"]=>
    string(6) "488805"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
}

我需要:

array(4) {
  [448805]=>
  array(3) {
    ["DevID"]=>
    string(6) "448805"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
  [487195]=>
  array(3) {
    ["DevID"]=>
    string(6) "487195"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
  [487732]=>
  array(3) {
    ["DevID"]=>
    string(6) "487732"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
  [488805]=>
  array(3) {
    ["DevID"]=>
    string(6) "488805"
    ["Active"]=>
    string(1) "0"
    ["SiteType"]=>
    string(1) "1"
  }
}

2 个答案:

答案 0 :(得分:1)

只需遍历第一个数组,然后使用第一个数据创建另一个数组。

$arr2 = array();
foreach ($arr1 as $val) {
   $arr2[$val['DevID']] = $val;
}

答案 1 :(得分:1)

我发现自己做了很多,所以我为它创建了一个函数:

function array_index(array $array, $key)
{
    $index = array();
    $count = count($array);

    for ($i = 0; $i < $count; $i++)
    {
        if (!array_key_exists($key, $array[$i]))
        {
            continue;
        }

        $index[$array[$i][$key]] = $array[$i];
    }

    return $index;
}

用法:

$index = array_index($yourDbResult, 'DevID');

这是一个类似的功能,但你传递一个callable作为键。 callable将接收数组中的每个项目,其返回值将用作索引键。用于对索引键执行某些操作。

function array_index_callback(array $array, $callback)
{
    $index = array();
    $count = count($array);

    for ($i = 0; $i < $count; $i++)
    {
        $indexKey = $callback($array[$i]);
        $index[$indexKey] = $array[$i];
    }

    return $index;
}

用法:

$index = array_index_callback($yourDbResult, function(&$item) {
    return 'id_'.$item['DevID'];
});