开发者

php - string trim

Please help me on this.

$str = "col_1          col_2  col_3
row1 row2 row3
row12 row22        row33";

$arr = explode("\n", $str);

foreach($arr as $line)
{
   $temp_arr = explode(WHAT HERE, $line); 
}

How do I explode each line into array?? I want $temp_arr[0] = col_1, $temp_arr[1] = col2, $temp_arr[2] = col_3 next line will have $temp_arr[0] = row1, $temp_arr[1] = row2

You guys are awesome. It works on my example but it doesn't work on my real problem. I export windows xp processes and want to explode them.

Caption              CommandLine                                                                                                                                                                                                                                                                   ProcessId  
System Idle Process                                                                                                                                                                                                                                                                                0          
System                                                                                                                                                                                                                                                                                             4          
smss.exe             \SystemRoot\System32\smss.exe                                                                                                                                                                                                                                                 604        
avgrsx.exe           C:\PROGRA~1\AVG\AVG10\avgrsx.exe /restart /boot                                                                                                                                                                                                                               692        
csrss.exe            C:\WINDOWS\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16  780        
winlogon.exe         winlogon.exe                                                                                                                                                                                                                                                                  820        
services.exe         C:\WINDOWS\system32\services.exe                                                                                                                                                                                                                                              880        
lsass.exe            C:\WINDOWS\system32\lsass.exe                                                                                                                                                                                                                                                 892        
nvsvc32.exe          C:\WINDOWS\system32\nvsvc32.exe                                                                                                                                                                                                                                               1052       
svchost.exe          C:\WINDOWS\system32\svchost -k DcomLaunch                                                                                     开发者_开发知识库                                                                                                                                                1168       
svchost.exe          C:\WINDOWS\system32\svchost -k rpcss                                                                                                                                                                                                                                          1240       
svchost.exe          C:\WINDOWS\System32\svchost.exe -k netsvcs                                                                                                                                                                                                                                    1328       
svchost.exe          C:\WINDOWS\system32\svchost.exe -k NetworkService                                                                                                                                                                                                                             1404       
svchost.exe          C:\WINDOWS\system32\svchost.exe -k LocalService                                                                                                                                                                                                                               1520       
spoolsv.exe          C:\WINDOWS\system32\spoolsv.exe                                                                                                                                                                                                                                               1664       
explorer.exe         C:\WINDOWS\Explorer.EXE                                                                                                                                                                                                                                                       1956       
jqs.exe              "C:\Program Files\Java\jre6\bin\jqs.exe" -service -config "C:\Program Files\Java\jre6\lib\deploy\jqs\jqs.conf"                                                                                                                                                                460        
avgtray.exe          "C:\Program Files\AVG\AVG10\avgtray.exe"                                                                                                                                                                                                                                      1156       
rundll32.exe         "C:\WINDOWS\system32\RUNDLL32.EXE" C:\WINDOWS\system32\NvMcTray.dll,NvTaskbarInit                                                                                                                                                                                             1204       
alg.exe              C:\WINDOWS\System32\alg.exe                                                                                                                                                                                                                                                   1376       
AVGIDSMonitor.exe    "C:\Program Files\AVG\AVG10\Identity Protection\agent\bin\avgidsmonitor.exe"                                                                                                                                                                                                  660        
iexplore.exe         "C:\Program Files\Internet Explorer\iexplore.exe"                                                                                                                                                                                                                             620        
OUTLOOK.EXE          "C:\Program Files\Microsoft Office\Office12\OUTLOOK.EXE"  /recycle                                                                                                                                                                                                            1884       
SQLyog.exe           "C:\Program Files\SQLyog\SQLyog.exe"                                                                                                                                                                                                                                          2596       
UniKeyNT.exe         "C:\Program Files\unikey40RC2-1101-win32\UniKeyNT.exe"                                                                                                                                                                                                                        964        
avgcsrvx.exe         C:\Program Files\AVG\AVG10\avgcsrvx.exe /pipeName=4f758821-d931-4842-ae08-b81fe89b843a /coreSdkOptions=0 /binaryPath="C:\Program Files\AVG\AVG10\" /registryPath="SYSTEM\CurrentControlSet\Services\Avg\Avg10"                                                                3788       
svchost.exe          C:\WINDOWS\system32\svchost.exe -k imgsvc                                                                                                                                                                                                                                     3604       
mstsc.exe            "C:\WINDOWS\system32\mstsc.exe"                                                                                                                                                                                                                                               3868       
notepad++.exe        "C:\Program Files\Notepad++\notepad++.exe"                                                                                                                                                                                                                                    4072       
notepad.exe          "C:\WINDOWS\system32\NOTEPAD.EXE" C:\Documents and Settings\Quy Nguyen\Desktop\cool.txt                                                                                                                                                                                       2228       
cmd.exe              "C:\WINDOWS\system32\cmd.exe"                                                                                                                                                                                                                                                 2552       
wmic.exe             WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid                                                                                                                                                                                                     2480       
wmiprvse.exe         C:\WINDOWS\system32\wbem\wmiprvse.exe                                                                                                                                                                                                                                         1744       


replace

$temp_arr = explode(WHAT HERE, $line);

with

$temp_arr = preg_split('/\s+/', $line, -1, PREG_SPLIT_NO_EMPTY);

Edit: added PREG_SPLIT_NO_EMPTY

OK, so your question changed a bit. This code should do exactly what you want:

$processes = 'the list you posted';

$temp = preg_split('/\s*(?:\r?\n)+/', $processes, -1, PREG_SPLIT_NO_EMPTY);
$process_list = array();
foreach ($temp as $process) {
    $process_list[] = array_pad( // array_pad makes the length consistent
        preg_split(
            '/\s{2,}/', // match only 2 or more consecutive spaces for splitting
            $process,
            3,
            PREG_SPLIT_NO_EMPTY), // ignore empty matches (i.e., end of line)
        3, // pad array to a length of 3
        ''
    );
}

$process_list_final = array();
$process_list_titles = array_shift($process_list);

foreach ($process_list as &$plist_item) {
    $plist_item = array_combine($process_list_titles, $plist_item);
}

It probably needs a bit of cleanup, but you can do that on your own =)

Some functions for you to look up:

  • preg_split
  • array_pad
  • array_shift
  • array_combine


You probably want preg_split.

$str = "col_1          col_2  col_3
    row1 row2 row3
    row12 row22        row33";

$arr = explode("\n", $str);

foreach($arr as $line)
{
   $temp_arr = preg_split("#\s+#", $line, -1, PREG_SPLIT_NO_EMPTY); 
}

preg_split, unlike explode, allows you to use something called regular expressions to split a string into chunks. In this case:

  • # "Begin the regex"
  • \s+ means "one or more consecutive whitespaces".
  • -1 means there should not be any limit to the number of matches (change this to your preferred number if you'd like)
  • PREG_SPLIT_NO_EMPTY is a special constant which tells the method to never return an empty result so you don't need to worry about this:

        row1

EDIT


Just noticed your edit. You can modify the regular expression to "#\s++#" to make it search for at least 2 spaces, and you can keep adding +'s, or you can use braces to do the job for you. You can see more here.


$temp_arr = explode("\n", $line); 


In PHP you can do that very differently in php.

I dont know what the real data you have to explode, but if you have just space-delimited data you can do just that:

foreach ($arr as $line) {
  // removing double-spaces
  while(strpos($line, ' ') !== false) $line = str_replace('  ', ' ', $line);
  // trim leading and trailing spaces. you can safely move it to explode
  $line = trim($line);
  // will be better if you replace double-spaces before. it will be faster a lot.
  //-> just space character (0x20) here now (!)
  $temp_arr = explode(' ', $line);
}

Also you can split array to variables instantly with list. Just like that:

list( $row1, $row2, $lastrow ) = explode(" ", $line);`

Don't use preg_split for that simple problem. Too slowly for that.

Good luck)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜