1

次のような多次元の数値ゼロインデックス配列があるとします。

$oldArray = (
    0 => array("importantKey" => "1", "otherKey" => "someValue"),
    1 => array("importantKey" => "4", "otherKey" => "someValue"),
);

「importantKey」の一意性を確信できる場合、これを次のようにマップする最もクリーンな方法は何ですか?

$newArray = (
    1 => array("otherKey" => "someValue"),
    4 => array("otherKey" => "someValue"),
);

これは、「importantKey」で GROUP BY 句を実行した後にデータベースから複数の行を取得する場合に役立ちます。

4

4 に答える 4

2

これを試して

$newArray = array_reduce($oldArray, function($res, $val) {
    $res[$val['importantKey']]['otherKey'] = $val['otherKey'];

    return $res;
}, array());

これで十分エレガントですか?:)

于 2013-04-29T10:48:01.450 に答える
1
$data=array();
foreach($oldArray as $k=>$v)
{
   if(isset($v['importantKey']) && isset($v['otherKey']))
   {
      $data[$v['importantKey']]=array('otherKey' =>$v['otherKey']);
   }
}

echo "<pre />";
print_r($data);
于 2013-04-29T10:47:43.433 に答える
0

「クリーン」をどのように定義するかによって異なります。これはどう?

$newArray = array_combine(
    array_map(function (array $i) { return $i['importantKey']; }, $oldArray),
    array_map(function (array $i) { return array_diff_key($i, array_flip(['importantKey'])); }, $oldArray)
);

ただし、これには、単純な方法を使用するよりも数回の反復が必要foreachです。

于 2013-04-29T10:49:56.697 に答える
0

これは、キーを除く配列全体を配列にコピーする簡単なソリューションです。とにかく配列インデックスとして PK が必要なのはなぜですか? PHP 配列はデータベースの行ではなく、配列のメタデータはデータベース データであってはなりません。

$new = array();
foreach($old as $value) {
    $newInner = $value;
    unset($newInner["importantKey"])
    $new[$value["importantKey"]] = array($newInner);
}
于 2013-04-29T10:51:37.650 に答える