日本語で説明すると面倒ですねw
以下のような配列から
$list = array(
"item100" => "aaa",
"item50" => "bbb",
"item30" => "ccc",
"item10" => "ddd"
);
以下のような配列を取得したかったのです。
$list = array(
"item30" => "ccc",
"item50" => "bbb"
);
最終的にたどり着いたのは、この方法でした。
$list = array(
"item100" => "aaa",
"item50" => "bbb",
"item30" => "ccc",
"item10" => "ddd"
);
$cols = array("item30", "item50");
$ret = array_merge(
array_flip($cols),
array_intersect_key($list, array_flip($cols))
);
array_intersect_keyを行うと必要な要素は取得できるんですが、要素の並び順がもともとの $list の状態を保持していました。そこで、array_mergeを使って、指定したkeyの順番を保ちつつ、値を $list のもので上書きしています。