2013-07-13 2 views
-1

다른 값으로 구성된 문자열을 구문 분석 한 다음 다른 문자열이나 숫자가 될 수있는 값을 배열에 저장해야합니다. 입력PHP를 사용하여 문자열을 구문 분석하고 배열에 데이터를 저장하는 방법

예 문자열 :

$inputString = 'First key this is the first value Second second value Thirt key 20394'; 

나는 세분] 내 초기 입력 문자열을 찾을 수있는 키를 포함하는 배열을 만들 생각했다. 키워드와 배열은 다음과 같이 될 수 있습니다 찾을 수 있습니다 :

$arrayFind = array ('First key', 'Second', 'Thirt key'); 

지금 생각 사이클에 새로운 배열 결과의 끝과 가게에 처음부터 $의 arrayfind입니다.

$result = array(
       'First key'=>'this is the first value', 
       'Second' => 'second', 
       'Thirt val' => '20394'); 

누구든지 나를 도울 수 있습니다 : 내가 필요로하는 결과 배열은 같다? 고마워요.

+4

. 첫 번째 값이 "두 번째 차선 왼쪽"또는 이와 유사한 경우 어떻게됩니까? – JimL

+0

구분 기호가 있습니까? – DevZer0

+1

키 목록을'/ First | Second | Third /'정규식 패턴으로 변환하고'preg_split()'를 사용하십시오. – mario

답변

1
<?php 
error_reporting(E_ALL | E_STRICT); 

$inputString = 'First key this is the first value Second second value Thirt key 20394'; 
$keys = ['First key', 'Second', 'Thirt key']; 

$res = []; 
foreach ($keys as $currentKey => $key) { 
    $posNextKey = ($currentKey + 1 > count($keys)-1) // is this the last key/value pair? 
        ? strlen($inputString) // then there is no next key, we just take all of it 
        : strpos($inputString, $keys[$currentKey+1]); // else, we find the index of the next key 
    $currentKeyLen = strlen($key); 
    $res[$key] = substr($inputString, $currentKeyLen+1 /*exclude preceding space*/, $posNextKey-1-$currentKeyLen-1 /*exclude trailing space*/); 
    $inputString = substr($inputString, $posNextKey); 
} 

print_r($res); 
?> 

출력 :

작업 할 끔찍한 입력의
Array 
(
    [First key] => this is the first value 
    [Second] => second value 
    [Thirt key] => 20394 
) 
1

이렇게 빠르고 간단하게 코드 조각을 만들 수 있습니다.

$inputString = 'First key this is the first value Second second value Thirt key 20394'; 
$tmpString = $inputString; 
$arrayFind = array ('First key', 'Second', 'Thirt key'); 
foreach($arrayFind as $key){ 
    $pos = strpos($tmpString,$key); 
    if ($pos !== false){ 
     $tmpString = substr($tmpString,0,$pos) . "\n" . substr($tmpString,$pos); 
    } 
} 
$kvpString = explode("\n",$tmpString); 
$result = array(); 
$tCount = count($kvpString); 
if ($tCount>1){ 
    foreach ($arrayFind as $f){ 
     for ($i=1;$i<$tCount;$i++){ 
      if (strlen($kvpString[$i])>$f){ 
       if (substr($kvpString[$i],0,strlen($f))==$f){ 
        $result[$f] = trim(substr($kvpString[$i],strlen($f))); 
       } 
      } 
     } 
    } 
} 
var_dump($result); 

참고 :이 입력 문자열

이이 작업을 수행하는 가장 우아한 방법이 될 수 없습니다에서 캐리지 리턴 \n가없는 가정 . 또한 문자열에 키의 중복이 있으면 마지막 값을 취합니다.

관련 문제