php значение ключа обмена массивов между двумя массивами - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть 2 массива, такие как

array (
  0 => 'END PIECE',
  1 => 'END PIECE',
  2 => 'END PIECE',
  3 => 'Title translation test 2',
  4 => 'Title translation test 2',
  5 => 'PIÈCE D\'EXTRÉMITÉ'
);

и

array (
  0 => '47933',
  1 => '47935',
  2 => '47936',
  3 => '47929',
  4 => '47930',
  5 => '47933'
);

Я хочу сделать один массив из этого 2 массива, как

array (
  'END PIECE' => '47933',
  'END PIECE' => '47935',
  'END PIECE' => '47936',
  'Title translation test' => '47929',
  'Title translation test' => '47930',
  'PIÈCE D\'EXTRÉMITÉ' => '47933'
);

Возможно ли это ? * Требуется версия 1014 * 5.3, я пробовал это

$c = array();
foreach($arr1 as $k => $val){
    $c[] = array($arr2[$k] => $val);
}

Но это не работает

Ответы [ 2 ]

2 голосов
/ 21 апреля 2020

Есть два способа сделать это, простая версия всегда будет иметь подмассив ...

$c = array();
foreach($arr1 as $k => $val){
    $c[$arr2[$k]][] = $val;
}

print_r($c);

дает ...

Array
(
    [END PIECE] => Array
        (
            [0] => 47933
            [1] => 47935
            [2] => 47936
        )

    [Title translation test 2] => Array
        (
            [0] => 47929
            [1] => 47930
        )

    [PIÈCE D'EXTRÉMITÉ] => Array
        (
            [0] => 47933
        )

)

Если вы хотите, чтобы дубликаты только иметь вложенные массивы, то вам нужно при добавлении нового элемента проверить, если элемент уже установлен и уже массив, корректируясь, как вы go вдоль ...

$c = array();
foreach($arr1 as $k => $val){
    if ( isset ($c[$arr2[$k]])) {
        if ( !is_array($c[$arr2[$k]]) )
            $c[$arr2[$k]] = [$c[$arr2[$k]]];
        $c[$arr2[$k]][] = $val;
    }
    else    {
        $c[$arr2[$k]] = $val;
    }
}
print_r($c);

дает ...

Array
(
    [END PIECE] => Array
        (
            [0] => 47933
            [1] => 47935
            [2] => 47936
        )

    [Title translation test 2] => Array
        (
            [0] => 47929
            [1] => 47930
        )

    [PIÈCE D'EXTRÉMITÉ] => 47933
)

Как видите, элемент PIÈCE D'EXTRÉMITÉ в ​​обоих случаях различен.

1 голос
/ 21 апреля 2020

Вы можете использовать функцию array_combine (), с которой она работает (PHP 5, PHP 7), как показано ниже

$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);

Вывод:

Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...