Создание массива из длинного списка идентификаторов LCID

#php #arrays #lcid

#php #массивы #lcid

Вопрос:

У меня есть длинный список идентификаторов LCID, которые я хочу назначить друг другу. Вот выдержка:

 1031
1033
1034
1061
1062
1026
 

Я хочу, чтобы в итоге у меня был массив или список, который выглядит следующим образом:

 1031 => 1033
1031 => 1034
1031 => 1061
1031 => 1062
1031 => 1026
1033 => 1031
1033 => 1034
1033 => 1061
1033 => 1062
1033 => 1026
1034 => 1031
1034 => 1033
1034 => 1061
1034 => 1062
1034 => 1026
 

И так далее.

Любой совет о том, как решить эту проблему в PHP? Помощь очень ценится!

РЕДАКТИРОВАТЬ: теперь я придумал это (все еще не то, что мне нужно, но я как-то добираюсь туда …)

 foreach($a_languageIDs as $lcid){

    $src_lcid = $lcid   1024;
    $trg_lcid = $lcid   1024;

        for ($i = 0; $i < count($a_languageIDs); $i  ) {

            echo "$src_lcid -> $trg_lcidrn";
        }
}
 

Что дает мне такой результат:

 1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1031 -> 1031
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
1033 -> 1033
 

Это, по крайней мере, дает мне этот повторяющийся список, но я до сих пор понятия не имею, как адаптировать значение $trg_lcid .

Комментарии:

1. Встроенной функции нет, поэтому вам придется создать собственную. В основном вам нужны вложенные итерации. Вы пытались решить это самостоятельно? Хотя мы рады помочь, от вас все равно ждут собственных усилий. Если вы пытались что-то сделать безуспешно, пожалуйста, добавьте код и объясните, где и как он не позволил достичь желаемого результата.

2. Хотя, теперь, когда я присмотрелся повнимательнее, вы не можете получить желаемый результат. Ключи не могут быть продублированы. Лучшее, что вы могли бы получить, это сохранить массив всех других элементов под одним ключом, например 1031 => [1033, 1034, ...] .

3. Спасибо за ваш вклад. Полчаса назад у меня действительно ничего не было. Проверка «вложенных итераций» немного приблизила меня, см. Мою правку.

4. Ах … если вам нужно только вывести результаты на экран, тогда вы можете использовать тот же ключ. Вы просто не можете создать такой массив. Я посмотрю.

5. Позже я хочу вставить $src_lcid и $ trg_lcid в функцию. Но на данный момент я думаю, что можно просто повторить его, а затем продолжить оттуда.

Ответ №1:

Вы можете использовать array_diff в цикле:

 $lcids = [1031, 1033, 1034, 1061, 1062, 1026];
$allCombinations = [];
foreach ($lcids as $lcid) {
    $allOtherLCIDs = array_diff($lcids, [$lcid]);
    foreach ($allOtherLCIDs as $otherLCID) {
        echo "$lcid -> $otherLCID<br>";
    }
}
 

Как это работает:

  • Мы перебираем ваш основной массив, чтобы найти комбинации для каждого из элементов.
  • Мы используем array_diff для создания массива, который содержит все элементы, кроме текущего. Он работает путем сравнения первого параметра (полного массива) со вторым (массивом, содержащим только текущий элемент) и возвращает все элементы первого параметра, которых нет во втором параметре.
  • После этого мы повторяем созданный diff и выводим текущий элемент внешнего цикла (основной массив) для каждого элемента массива diff.

Комментарии:

1. Еще раз спасибо за ваш вклад и объяснение. Это было очень полезно. Я внедрил это в свой код, и это работает как шарм 🙂