Объединение и устранение пар ключ-значение в массиве - PullRequest
0 голосов
/ 22 октября 2011

PHP вопрос о массивах.Предположим, у нас есть два массива:

[first] => Array
    (
        [0] => users
        [1] => posts
        [2] => comments
    )

[second] => Array
    (
        [users] => the_users
        [posts] => the_posts
        [comments] => the_comments
        [options] => the_options
    )

Как я могу сравнить эти два массива?То есть, как мы можем проверить, равно или нет значение в первом массиве ключу во втором массиве (array_flip?) После их комбинирования (array_merge?).И в зависимости от того, какая пара значение / ключ совпадает, удалите их из массива.

По сути, конечным результатом будут объединение двух массивов, удаление дубликатов и единственный индекс:

[third] => Array
    (
        [options] => the_options
    )

Ответы [ 4 ]

3 голосов
/ 22 октября 2011

попробуйте это:

$third = array_diff_key($second,array_flip($first));
0 голосов
/ 22 октября 2011

это ответ на ваш вопрос

$first= array
(
    "0" => "users",
    "1" => "posts",
    "2" => "comments"
);
$firstf=array_flip($first);
$second = array
(
    "users" => "the_users",
    "posts" => "the_posts",
    "comments" => "the_comments",
    "options" => "the_options"
);
$third=array_diff_key($second,$firstf);
print_r($third);
0 голосов
/ 22 октября 2011

Это довольно просто сделать, и этот способ чрезвычайно эффективен:

$third = $second;

foreach($first as $value)
{
    if (isset($third[$value]))
    {
      unset($third[$value]);
    }
}
0 голосов
/ 22 октября 2011

Может быть встроенная функция для этого, но если нет, попробуйте:

$third = array();
foreach(array_keys($second) as $item)
  if(!in_array($item, $first))
    $third[$item] = $second[$item];

Обратите внимание, что это предполагает, что $first не будет иметь элемент, который не имеетсоответствующий ключ в $second.Чтобы учесть это, у вас может быть дополнительный цикл (я не знаю, для чего бы вы установили значение в $third для них, может быть null:

foreach($first as $item)
  if(!in_array($item, array_keys($second)))
    $third[$item] = null;
...