mógłbyś przedstawić swój sposób ? bo z tego co zrozumiałem to i tak używasz foreach, do tego explode, rozdzielasz na dwie tablice a potem robisz array_combine ?
wątpie żeby była funkcja która może to bardziej uprościć, ale myślę że najszybciej będzie tak jak teraz file:
$output = Array();
foreach(file('plik.txt') as $w){
$w = explode('|', $w); // lub rtrim($w) w zależności czy dopuszczasz \n na końcu
$output[$w[0]] = $w[1];
}
można by na upartego zrobić tylko przez preg_match + file_get_contents + array_combine ale to na pewno nie będzie szybsze (chociaż kto wie, tam się tworzy pełno mini tablic + funkcja file podobno jest nieporównywalnie wolniejsza):
$output = preg_match_all('/(.*)\|(.*)/', @file_get_contents('plik.txt'), $w) ?
array_combine($w[1], $w[2]) : Array();
jeśli masz wpływ na format tego pliku to lepiej jego dostosuj
tak czy inaczej musisz jakoś plik wczytać ... poniżej 2 linijek raczej nie zejdziesz, a radzę zostać przy 4
ale czy to naprawdę aż takie ważne ?