是否有从其他数组值创建assoc数组的函数?

时间:2014-02-10 12:04:49

标签: php arrays

我有一个带有两个值的数组,比如((id, value), (id, value), (id, value)),我需要像id => value一样做数组,所以我想知道php中有一些函数用于这种工作或者我需要编写我自己的。只是不想重新发明轮子....

更新

array(2) {
  [0]=>
  array(2) {
    ["site_id"]=>
    string(3) "12"
    ["timestamp"]=>
    string(19) "2014-01-09 08:48:40"
  }
  [1]=>
  array(2) {
    ["site_id"]=>
    string(3) "13"
    ["timestamp"]=>
    string(19) "2014-02-07 14:27:57"
  }
}

2 个答案:

答案 0 :(得分:6)

php中的一些HOF,只是为了好玩:

$data = array(
    array('foo', 'bar'),
    array('baz', '42'),
);

$ithIx = function($ix) {
    return function($item) use($ix) {
        return $item[$ix];
    };
};

$combined = array_combine(
    array_map($ithIx(0), $data),
    array_map($ithIx(1), $data)
);

var_dump($combined);

在线演示:http://ideone.com/jIsgpL

对于那些在功能风格上看不到美的人 - 这里有些无聊foreach

$combined = array();
foreach ($data as $val) {
    $combined[$val[0]] = $val[1];
}

答案 1 :(得分:1)

另一种解决方案(半无聊):

$a = array(
    array(1, 'Hello'),
    array(2, 'World')
);

$a = array_combine(array_column($a, 0), array_column($a, 1));

(如果PHP <5.5)

function array_column($array, $column)
{
    return array_map(function($e) use ($column) {return $e[$column];}, $array);
}