2015-04-03 2 views
-1

я хочу, чтобы получить некоторую информацию из текстового файла ... прочитал уже через несколько вопросов, но не было никакого решения для моего одногоPHP Анализировать текстовые файлы, чтобы получить конкретные данные

inventoryItemData { 
    header { 
    id: 3758164995 
    } 
    itemType: 1 
    itemID: 2561 
    count: 1 
    isOwnerList: false 
    fromLand: 0 
    sourceLen: 0 
} 

Это в моем текстовый файл и я хочу, чтобы получить тип элемента и Itemid в виде строки, так в этом примере, как

'(2561,1)' 

я знаю, что я могу работать с Еогеасп и сохранить каждую строку в массив, но я не» t знаю, как я могу получить два номера

+0

Вы пробовали что-нибудь? – Rizier123

+1

Что создало этот файл txt в первую очередь? – Gordon

+0

это был скрипт python и да, я тоже думаю JSON – NoLand

ответ

0
$file = fopen('input.txt', "r"); 
    $itemID = ''; 
    $itemType = ''; 
    while($line = fgets($file)) 
    { 
      if(preg_match('/itemType: (\d+)/', $line, $matches)) 
      { 
        $itemType = $matches[1]; 
      } 
      else if(preg_match('/itemID: (\d+)/', $line, $matches)) 
      { 
        $itemID = $matches[1]; 
      } 
    } 
    $string = "($itemID,$itemType)"; 
    print $string . "\n"; 

редактировать и версия способна поддерживать несколько записей в файле

$file = fopen('input.txt', "r"); 
$itemID = null; 
$itemType = null; 
$arrayAssoc = array(); 
$arrayStrings = array(); 
while($line = fgets($file)) 
{ 
     if(preg_match('/itemType: (\d+)/', $line, $matches)) 
     { 
       $itemType = $matches[1]; 
     } 
     else if(preg_match('/itemID: (\d+)/', $line, $matches)) 
     { 
       $itemID = $matches[1]; 
     } 
     if($itemType != null && $itemID != null) 
     { 
       $arrayAssoc[$itemID] = $itemType; 
       $arrayString[] = "($itemID,$itemType)"; 
       $itemType = $itemID = null; 
     } 
} 
print_r($arrayAssoc); 
print_r($arrayString); 
+0

Я не думаю, что это будет работать, как я хочу ... У меня есть txt-файл с большим количеством этих контейнеров InventoryData в нем, и я хочу иметь itemID и itemType каждого контейнера в массиве ... поэтому itemtype и id, принадлежащие друг другу в каждом контейнере – NoLand

+0

, хорошо его легко настроить выше, чтобы сделать это. вы хотите, чтобы это был ассоциативный массив? или массив, полный (1234, 1)? –

+0

массив, полный этих строк ... так, например, массив [0] = (1234,1) array [2] = (1235,3) – NoLand

0

Это должно работать для вас:

(Во-первых я получаю все строки в массив с file(). Затем я захватываю все строки с preg_grep(), которые содержат (содержат) один элемент массива $search. В конце концов, я просто отфильтровать текст из поиска с preg_filter() из)

<?php 

    $lines = file("test.txt", FILE_IGNORE_NEW_LINES); 
    $search = ["itemType:", "itemID:"]; 
    $arr = preg_filter("/(\b" . implode("|\b", $search) . ")/", "", preg_grep("/(\b" . implode("|\b", $search) . ")/", $lines)); 

    print_r($arr); 

?> 

выход:

Array ([4] => 1 [5] => 2561) 
Смежные вопросы