список, очевидно, сгенерирован, так что вам лучше повременить с исправлением генератора, но если вы застряли с этим одним списком, ниже следует проанализировать его так, как вы хотите:
$langs_ar = array();
$codes_ar = array();
$families_ar = array();
foreach(preg_split('/[\r\n]+/', $codes) as $line)
{
if (preg_match('/^(\S+\s*\S+)\s+(\S{2})\s+(\S.*\S)\s*$/', $line, $matches))
{
$langs_ar[] = $matches[1];
$codes_ar[] = $matches[2];
$families_ar[] = $matches[3];
}
}
Да, и вместо 3-х массивов я бы порекомендовал один массив для хранения хэшей для 3-х полей; или создайте свои собственные объекты с 3 свойствами lang, code и family.
Редактировать: гораздо более короткий способ сделать то же самое:
preg_match_all('/^(\S+\s*\S+)\s+(\S{2})\s+(\S.*\S)\s*$/m', $codes, $matches, PREG_SET_ORDER);
var_dump($matches);
$ match теперь является массивом «объектов» для всех ваших строк, где индексы:
- 0 - полная строка
- 1 - это язык
- 2 - это код
- 3 - это семья
просто повторяйте это, чтобы делать все, что вы хотите.