我有這個 string(245)「 - 當前地圖= VILLA - 當前任務= VEGAS JUNKYARD,別墅,總統府,殺死房屋,街道,三個國王賭場; - 可用任務= TRAINYARD,進出口,MURDERTOWN,CQB培訓,煉油廠,會議中心,劇院;「PHP,切割字符串
當前地圖始終是一個值, 當前任務和可用任務具有可變數量的值。
我想解析字符串,使我有一個數組,看起來像這樣:
Array ([Current Map] => VILLA [Current Missions] => Array ([0] => VEGAS JUNKYARD [1] => VILLA [2] => PRESIDIO [3] => KILL HOUSE [4] => STREETS [5] => THREE KINGDOMS CASINO) [Availible Missions] => Array ([0] => TRAINYARD [1] => IMPORT/EXPORT [2] => MURDERTOWN [3] => CQB TRAINING [4] => OIL REFINERY [5] => CONVENTION CENTER [6] => THEATER))
什麼工作:它的方式隔開了3層大的部分(當前地圖,當前任務,Availible Missions)
什麼不起作用:將「當前任務」和「可用任務」的多個值分隔到一個數組中。
錯誤(或者我只是愚蠢):注意前「菱使命」
$search_strs_maps = array('Current Map = ', '- Current Missions = ', '; - Available Missions = ', ';');
如果我把分號有它不覺得即使我敢肯定分號是什麼分號字符串。
原因,我把這個最高的是我不能弄清楚,爲什麼它沒有發現任何東西,當我把分號之前‘菱使命’,它的駕駛我瘋了。此外,我可以在代碼上使用第二套眼睛,並提供一些關於如何使其更好的建議。謝謝你的幫助!
這就是我到目前爲止所寫的內容。
<?php
$str_map = '- Current Map = VILLA - Current Missions = VEGAS JUNKYARD, VILLA, PRESIDIO, KILL HOUSE, STREETS, THREE KINGDOMS CASINO; - Available Missions = TRAINYARD, IMPORT/EXPORT, MURDERTOWN, CQB TRAINING, OIL REFINERY, CONVENTION CENTER, THEATER;';
$search_strs_maps = array('Current Map = ', '- Current Missions = ', '- Available Missions = ', ';');
for ($i=0; $i<3; $i++){
$str_map = trim ($str_map);
output($str_map, 'Complete String');
//Cut of the beginning : "- Current Map = "
$start_pos = str_pos_last ($str_map, $search_strs_maps[$i]);
output($start_pos, 'Starting position');
$str_map = substr($str_map, $start_pos);
output($str_map, 'String after first cut:');
//Cut the remaining part to "Current Missions ="
$end_pos = strpos ($str_map, $search_strs_maps[$i+1]);
output($end_pos, 'End position');
//Save the new string without for example "VILLA"
$ergebnis = substr($str_map, 0, $end_pos);
$ergebnis = trim ($ergebnis);
output($ergebnis, 'Finished result');
$str_map = substr($str_map, $end_pos);
echo '<hr>';
if ($i==0){
$arr_return_strs['current_map'] = $ergebnis;
}else{ //arrays
//stupid semicolon that doesnt get cut of
$ergebnis = str_replace ($str_map, ';', '');
$arr_maps_temp = array();
//count the number of commas, if there is one comma that means there are 2 words, there is no comma at the end
$map_count = substr_count ($ergebnis, ',')+1;
for ($ii=0;$ii<$map_count;$ii++){
echo '<hr';
//cut at first comma
$result_pos = strpos($str_map, ',');
//save
$result_map = substr($str_map, 0, $result_pos);
//cut of the result+comma
$ergebnis = substr ($ergebnis, $result_pos);
output($result_map, 'Result is:');
}
}
}
echo '<hr><hr><hr>';
print_r ($arr_return_strs);
function str_pos_last ($input_str, $search_str, $offset=0){
//this function returns the endposition of a string we search for, strpos returns the beginning...
$str_begin = strpos ($input_str, $search_str);
$str_end = $str_begin + strlen($search_str);
return $str_end;
}
function output ($var, $desc){
echo $desc.'<br>';
var_dump ($var);
echo '<hr>';
}
?>
爲什麼使用第二個foreach循環?我不明白它的目的。難道你只是把「$ dataArrayValues = explode(',',$ dataArrayValues); $ resultArray [$ dataArrayKey] = $ dataArrayValues;」 – Diemex
我可以這樣做......我也應該修剪$ dataArrayValue條目,因爲在所有當前和可用任務條目(除了第一個條目)的開始處都有一個虛假空間。我只是試圖提供一個快速和簡單的答案,不涉及所有複雜的strpos/substr等,以顯示爆炸和修剪可以更容易和有效地完成工作 –