#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. Еще раз спасибо за ваш вклад и объяснение. Это было очень полезно. Я внедрил это в свой код, и это работает как шарм 🙂