Массив PHP копирует определенные ключи, встроенные функции? Производительность вложенного цикла?

У меня есть массив PHP, который я хотел бы продублировать, но копировать только элементы массива, ключи которых находятся в другом массиве.

Вот мои массивы:

$data[123] = 'aaa';
$data[423] = 'bbb';
$data[543] = 'ccc';
$data[231] = 'ddd';
$data[642] = 'eee';
$data[643] = 'fff';
$data[712] = 'ggg';
$data[777] = 'hhh';

$keys_to_copy[] = '123';
$keys_to_copy[] = '231';
$keys_to_copy[] = '643';
$keys_to_copy[] = '712';
$keys_to_copy[] = '777';

$copied_data[123] = 'aaa';
$copied_data[231] = 'ddd';
$copied_data[643] = 'fff';
$copied_data[712] = 'ggg';
$copied_data[777] = 'hhh';

Я мог бы просто перебрать массив данных следующим образом:

foreach ($data as $key => $value) {
  if ( in_array($key, $keys_to_copy)) {
    $copied_data[$key] = $value;
  }
}

Но это будет происходить внутри цикла, который извлекает данные из набора результатов MySQL. Таким образом, это будет цикл, вложенный в цикл данных MySQL.Обычно я стараюсь избегать вложенных циклов, если нет возможности использовать встроенные в PHP функции массива для получения нужного результата. Но мне также надоело иметь вложенный цикл в цикле данных MySQL, я не хочу, чтобы MySQL болтался без дела.

Я, вероятно, излишне беспокоюсь о производительности вложенных циклов, поскольку я никогда не буду делать это для более чем пары сотен строк данных и, возможно, 10 ключей.

Но я хотел бы знать, есть ли способ сделать это с помощью встроенных функций PHP.
Я взглянул на array_intesect_key(), но это не совсем так, потому что в моем массиве $keys_to_copyнужные мне ключи являются значениями массива, а не ключами.

Есть идеи?

Ура, Б

14
задан batfastad 16 March 2012 в 15:34
поделиться