Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否可以为数据库中的关联结果设置密钥?_Php_Laravel - Fatal编程技术网

Php 是否可以为数据库中的关联结果设置密钥?

Php 是否可以为数据库中的关联结果设置密钥?,php,laravel,Php,Laravel,从db获取结果时,是否可以设置作为数组中键的字段名?列出不适合的方法,因为存在多个值 基本上我有: array(4) { [0]=> array(3) { ["DevID"]=> string(6) "448805" ["Active"]=> string(1) "0" ["SiteType"]=> string(1) "1" } [1]=> array(3) { ["DevID"]=>

从db获取结果时,是否可以设置作为数组中键的字段名?列出不适合的方法,因为存在多个值

基本上我有:

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"
  }
}

只需循环第一个数组,并使用第一个数组中的数据创建另一个数组

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

我发现自己经常这样做,所以我为它创建了一个函数:

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;
}
这里有一个类似的函数,但是您传递了一个可调用函数作为键。可调用项将接收数组中的每个项,其返回值将用作索引键。用于对索引键执行某些操作

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;
}

只需在第一个数组中进行循环,并使用第一个数组中的数据创建第二个数组。
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'];
});