«Вырезать» элемент по ключу из массива - PullRequest
1 голос
/ 07 августа 2009

У меня есть индексированный массив с n элементами:

Array(
    'key1'     => 'value1',
    'key2'     => 'value1',
    'key3'     => 'value1',
    ...
    'key<i-1>' => 'value<i-1>',
    'key<i>'   => 'value<i>',
    'key<i+1>' => 'value<i+1>',
    ...
    'key<n>'   => 'value<n>'
)

Как "вырезать" (т.е. скопировать + удалить) элемент i_th, чтобы получить массив результатов:

Array(
    'key1'     => 'value1',
    'key2'     => 'value1',
    'key3'     => 'value1',
    ...
    'key<i-1>' => 'value<i-1>',
    'key<i+1>' => 'value<i+1>',
    ...
    'key<n>'   => 'value<n>'
)

Я знаю функции PHP array_pop () и array_shift (), но есть ли универсальная функция для «вырезания» элемента по его ключу?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 07 августа 2009

Вы можете использовать следующий код для извлечения и удаления элемента по его индексу:

function array_cut(&$array, $key) {
  if(!isset($array[$key])) return null;

  $keyOffset = array_search($key, array_keys($array));
  $result = array_values(array_splice($array, $keyOffset, 1));
  return $result[0];
}

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

echo "Numerically Index Test:\n";

$a = array(0,1,2,3,4,5,6);
echo array_cut($a, 2) . "\n";
var_dump($a);

echo "------------------------------\n";

echo "Assosiative Index Test:\n";

$b = array('hello' => 'world', 'how' => 'like that', 'where' => 'Stack Overflow');
echo array_cut($b, 'how') . "\n";
var_dump($b);

Выходы:

Numerically Index Test:
2
array(6) {
  [0]=>
  int(0)
  [1]=>
  int(1)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
  [5]=>
  int(6)
}
------------------------------
Assosiative Index Test:
like that
array(2) {
  ["hello"]=>
  string(5) "world"
  ["where"]=>
  string(14) "Stack Overflow"
}
2 голосов
/ 07 августа 2009
unset($myarray['mykey']);
1 голос
/ 07 августа 2009

array_splice () с пустой заменой, может быть?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...