2015-11-02 69 views
0

我有包含使用代碼$content1=stream_get_contents($request->getReport()); 返回輸出最好擺脫get_stream_content陣列()

Order ID Order date Fulfillment Channel Points Bonus Message response greater than 24 hours Late Shipment Cancellation Negative Feedback 
002-3444-XXXX 10/31/15 Fulfilled by Amazon 100         
002-XXXX-XXX7 10/31/15 Fulfilled by Amazon 100 

後的空間我想上面的字符串轉換成數組像下面

以下字符串
$array['Order ID']=002-3444-XXXX; 
    $array['Order date']=10/31/15; 
    $array['Fulfillment Channel']=Fulfilled by Amazon; 
    $array['Points']=100; 
    $array['Bonus']='';..... so on 

請建議我一種可能的方式將字符串轉換爲數組。

+0

你總是隻有那些5名PARAMS? – Nirnae

+0

不,我們可能會有消息,響應,超過24小時,遲交貨,取消,負面反饋,如果他們會有任何價值 – user123456

+0

嗯,我可以給你寫一個函數,但這將是非常具體的:/所以我沒有知道是否真的有用 – Nirnae

回答

0

這是我的代碼,正如我所說的,這有點亂,而且我對正則表達式不太好,所以在使用它時要小心。

<?php 
//Our Response from AMAZON 
$string = 'Order ID Order date Fulfillment Channel Points Bonus Message response greater than 24 hours Late Shipment Cancellation Negative Feedback002-3444-XXXX 10/31/15 Fulfilled by Amazon 100 002-XXXX-XXX7 10/31/15 Fulfilled by Amazon 100'; 

//Since we already know all the headers, we dont need to keep them into the response 
$noHeaderStr = substr($string, strpos($string,'Feedback')+8); 

//Split the remaining data into an arry 
$arrayData = explode(' ', $noHeaderStr); 

//Prepare Regex for data verification : 
$patternID = '/^([0-9]{3})-(.*){4}-(.*){4}$/'; 
$patternDate= '/^([0-9]{2})\/([0-9]{2})\/([0-9]{2})$/'; 
$patternBonus = '/^[0-9]{3}$/'; 

//index for every order 
$i = 0; 

//Now we test every data 
foreach ($arrayData as $data){ 
    if (preg_match($patternID, $data)) { 
     //if we find an ID, that mean a new order so a new array too 
     $newArray[$i] = array(); 
     $newArray[$i]['OrderID'] = $data; 

    }elseif(preg_match($patternDate, $data)) { 
     $newArray[$i]['Order date '] = $data; 
     var_dump($newArray[$i]); 
     $i++; 
    } 


    //THIS PART IS MESSY 
    /*elseif($data == 'Fulfilled by Amazon 100'){ 
     $newArray[$i]['Fulfillment Channel Points'] = $data; 
     var_dump($newArray[$i]); 
     $i++; 
    }elseif(preg_match($patternBonus, $data)){ 
     $newArray[$i]['Bonus'] = $data; 
    }*/ 
} 

?> 

這個增量對$ i應該是最後一個匹配。

從我給你的,現在你應該從收到的var_dump是這樣的:

array (size=2) 
    'OrderID' => string '002-3444-XXXX' (length=13) 
    'Order date ' => string '10/31/15' (length=8) 
array (size=2) 
    'OrderID' => string '002-XXXX-XXX7' (length=13) 
    'Order date ' => string '10/31/15' (length=8)