2016-03-30 7 views
-3

У меня есть 2 файлов, напримерОбъединить столбцы из двух текстовых символов-отделенны текстовые файлов

file1.txt и file2.txt, каждые из которых содержат ряды двух столбцов, разделенных с помощью : характера.

file1.txt содержит, например, следующее содержание: (Я хочу использовать первый «столбец»)

a:b 
markus:lanz 
peter:heinrichs 
lach:schnell 

и file2.txt содержит, например, следующие содержания (я хочу использовать второй «столбец»)

b:c 
lanz:hallo 
heinrichs:gruss 
schnell:langsam 

Так я ищу следующий вывод:

a:c 
markus:hallo 
peter:gruss 
lach:langsam 

Как это возможно?

Мой текущий код выглядит следующим образом:

<?php 
    $file1 = 'a:b 
    markus:lanz 
    peter:heinrichs 
    lach:schnell'; 

    $file2 = ' 
    lanz:hallo 
    heinrichs:gruss 
    b:c 
    test:notest 
    schnell:langsam'; 

    $array = explode(":", $file1); 
    for($i=0; $i < count($array); $i++) { 
     $array = explode(":", $file1); 
     $pattan = $array[$i]; 
     $pattern = '=\n'. $pattan .':(.*)\n=sUm'; 
     $result = preg_match($pattern, $file2, $subpattern); 

     echo "<br>"; 
     echo $array[$i]; 
     $first = $array[$i]; 
     echo "<br>"; 
    } 

    $pattern = '=\n'. $first .':(.*)\n=sUm'; 
    $result = preg_match($pattern, $file2, $subpattern); 
    var_dump($subpattern); 
?> 
+3

Начните с написания код. Никто не сделает это за вас. –

+1

Покажите, что вы пробовали, тогда мы можем вам помочь. – betseyb

ответ

0

Решение с использованием preg_split и array_map функции:

$file1_content = "a:b 
markus:lanz 
peter:heinrichs 
lach:schnell"; 

$file2_content = "b:c 
lanz:hallo 
heinrichs:gruss 
schnell:langsam"; 

// \R modifier matches line break among all platforms (\r\n|\n|\r) 
$file1_parts = preg_split('/\R/', $file1_content); 
$file2_parts = preg_split('/\R/', $file2_content); 

$cross_result = array_map(function($fp1, $fp2){ 
    return explode(":", $fp1)[0] .":". explode(":", $fp2)[1] . PHP_EOL; 
}, $file1_parts, $file2_parts); 

$cross_result = implode("", $cross_result); 

print_r($cross_result); 

Выходные:

a:c 
markus:hallo 
peter:gruss 
lach:langsam 
+0

большое спасибо сэр. и если я хочу, чтобы это сделать от a: b: c: d: e: f: g: h: i – yarak32

+0

приветствую, не могли бы вы объяснить, что значит «сделать это от a: b: c: d: e : f: g: h: i "? – RomanPerekhrest

+0

yarak32

0
$file1 = 'a:b 
markus:lanz 
peter:heinrichs 
lach:schnell'; 
$array1 = explode("\n", $file1); 

$file2 = 'b:c 
lanz:hallo 
heinrichs:gruss 
schnell:langsam'; 
$array2 = explode("\n", $file2); 

$array3 = array(); 

foreach($array1 as $i => $value) { 
    $key = explode(':',$value)[0]; 
    $val = explode(':',$array2[$i])[1]; 
    $array3[] = $key.':'.$val; 
} 

$file3 = implode("\n",$array3); 
+0

, если у меня другой порядок на $ file1 и $ file2 f.e. : $ file1 = 'markus: lanz a: b peter: heinrichs lach: schnell'; $ array1 = explode ("\ n", $ file1); $ file2 = 'b: c lanz: hallo heinrichs: gruss schnell: langsam'; $ array2 = explode ("\ n", $ file2); – yarak32

+0

что я могу сделать? – yarak32

0

мои мысли/мои коллеги де как то

не работает

, но до некоторых людей ненавидит или что-то подобное:

<?php 
$file1 = 'a:b 
markus:lanz 
peter:heinrichs 
lach:schnell'; 

$file2 = ' 
lanz:hallo 
heinrichs:gruss 
b:c 
test:notest 
schnell:langsam'; 





    $array = explode(":", $file1); 


    for($i=0; $i < count($array); $i++) { 



$pattern = "/^.*\b". $array[$i] ."\b.*$/m"; 
$matches = array(); 
preg_match($pattern, $file2, $matches); 

var_dump($matches); 

    echo $array[$i] . ":"; 
    } 

?>