aebstract Posted March 5, 2010 Share Posted March 5, 2010 I have a text file, structured like this: Array ( [0] => 201 [userid] => 1 [1] => OR_host [computed] => OR_host [2] => host [computed1] => host [3] => [CreatedDate] => ) Array ( [0] => 202 [userid] => 2 [1] => OR_admin [computed] => OR_admin [2] => admin@outlawracing.com [computed1] => admin@outlawracing.com [3] => 1156790760 [CreatedDate] => Aug 28 2006 1:46PM ) Array ( [0] => 203 [userid] => 3 [1] => Tony Reece [computed] => Tony Reece [2] => tony@outlawracing.com [computed1] => tony@outlawracing.com [3] => 1156863060 [CreatedDate] => Aug 29 2006 9:51AM ) Array ( [0] => 204 [userid] => 4 [1] => Tony Reece_Admin [computed] => Tony Reece_Admin [2] => tony.reece@datavue.com [computed1] => tony.reece@datavue.com [3] => [CreatedDate] => ) I need to read the text file, and be able to loop through every array. I'm not really sure how I would approach this since the arrays aren't labeled or anything. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/ Share on other sites More sharing options...
Catfish Posted March 5, 2010 Share Posted March 5, 2010 can you post the actual data in the text file? all you need to do is make another array to house all of those arrays, then loop through them with for or foreach. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022040 Share on other sites More sharing options...
mikesta707 Posted March 5, 2010 Share Posted March 5, 2010 I think what he posted is the text file. OP do you have to store the information like that in the text file? if so parsing the file and turning the contents into seperate arrays will be somewhat difficult. not impossible, but time consuming. Perhaps the serialize() function would be better for storing the contents of whatever arrays into the file, and then you could use unserialize() to get the information from the text file back into a php array. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022045 Share on other sites More sharing options...
aebstract Posted March 5, 2010 Author Share Posted March 5, 2010 The information is getting put there like this: <?php $server = 'ww26.empiredatatech.com'; $link = mssql_connect($server, 'outlaw', 'out98765law'); $myFile = "array.txt"; $fh = fopen($myFile, 'w') or die("can't open file"); $query = mssql_query(" SELECT ordnn_Users.userid, CAST(ordnn_Users.username as varchar), CAST(ordnn_Users.email as varchar), ordnn_UserPortals.CreatedDate FROM ordnn_Users LEFT JOIN ordnn_UserPortals ON ordnn_UserPortals.UserID = ordnn_Users.UserID "); if(mssql_num_rows($query) > 0){ while($r=mssql_fetch_array($query)){ $whattime = $r[3]; $whattime = explode(" ", $whattime); if ($whattime[0] == Jan){ $whattime[0] = 1; } if ($whattime[0] == Feb){ $whattime[0] = 2; } if ($whattime[0] == Mar){ $whattime[0] = 3; } if ($whattime[0] == Apr){ $whattime[0] = 4; } if ($whattime[0] == May){ $whattime[0] = 5; } if ($whattime[0] == Jun){ $whattime[0] = 6; } if ($whattime[0] == Jul){ $whattime[0] = 7; } if ($whattime[0] == Aug){ $whattime[0] = 8; } if ($whattime[0] == Sep){ $whattime[0] = 9; } if ($whattime[0] == Oct){ $whattime[0] = 10; } if ($whattime[0] == Nov){ $whattime[0] = 11; } if ($whattime[0] == Dec){ $whattime[0] = 12; } $whattime2 = explode(":", $whattime[4]); $whattime2[2] = substr("$whattime2[1]", -2); $whattime2[1] = substr("$whattime2[1]", 0, 2); if ($whattime2[2] == 'PM') { $whattime2[0] = $whattime2[0]+12; } $r[3] = mktime($whattime2[0],$whattime2[1],0,$whattime[0],$whattime[1],$whattime[2],0); $r[0] = $r[0]+200; echo "<pre>"; print_r($r); echo "</pre>"; $str = print_r($r, true) . PHP_EOL; fwrite($fh, $str); } } else { echo mssql_get_last_message(); } fclose($fh); ?> I don't care what I need to do, I just need to do it now. I'm running out of time on a deadline and need to figure something out. Running in to all kinds of problems trying to grab this information. I'm going to have to do it about 3-4 times (different files and whatnot) so I need to figure out a way to do it. EDIT: I can easily store the information in any format in the text file, I just need to know what is easiest/best. Since I'm pulling it from the database, it'll be simple to format the file in any way. Just not sure how I need it to be. Thanks! Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022051 Share on other sites More sharing options...
mikesta707 Posted March 5, 2010 Share Posted March 5, 2010 i see you are using print_r to generate the string as I expected here: $str = print_r($r, true) . PHP_EOL; Try using serialize (check out the link from my post above) to generate the string version of the arrays to store. Then you could simply go through the file line by line, using unserialize to regenerate the PHP data. Alternatively, you could use json_decode/encode but serialize would probably be the better choice as what your doing probably has nothing to do with json Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022053 Share on other sites More sharing options...
Psycho Posted March 5, 2010 Share Posted March 5, 2010 This code will read the text file and convert it into an array variable. <?php $textData = file('array_data.txt'); $dataArray = array(); $tempArray = array(); $array_start = false; foreach ($textData as $line) { if ($array_start && preg_match("/\[([^\]]*)\] => (.*)/", $line, $keyValue)!= 0) { $tempArray[$keyValue[1]] = $keyValue[2]; } if(substr($line, 0, 1)=='(') { $array_start = true; } if(substr($line, 0, 1)==')') { $array_start = false; $dataArray[] = $tempArray; $tempArray = array(); } } print_r($dataArray); ?> Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022055 Share on other sites More sharing options...
GingerRobot Posted March 5, 2010 Share Posted March 5, 2010 I'd still suggest using the serialization functions. This is, afterall, what the functions are for. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022059 Share on other sites More sharing options...
aebstract Posted March 5, 2010 Author Share Posted March 5, 2010 With serialize, I'm trying to echo out the results and getting just "Array" on the screen. How do I loop through the array after I unserialize it? Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022073 Share on other sites More sharing options...
GingerRobot Posted March 5, 2010 Share Posted March 5, 2010 Try: $array = unserialize(file_get_contents('file.txt')); echo '<pre>' . print_r($array,true) . '</pre>'; Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022075 Share on other sites More sharing options...
aebstract Posted March 5, 2010 Author Share Posted March 5, 2010 That gave me the first array results shown on the screen, but I'm needing a way to loop through all of them so I can do something with each piece of information. I'm trying something like while($r = unserialize(file_get_contents('array.txt'))) { echo $r; } Though, it's just returning: ArrayArrayArrayArray.. If I echo $r[0] it returns something like: 201201201201201201201.. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022078 Share on other sites More sharing options...
mikesta707 Posted March 5, 2010 Share Posted March 5, 2010 when you echo an array in PHP, all it does is echo the literal string 'Array' judging by the fact that its actually saying array, the code is probably working pretty well. if you want to print the array in a human readable format, use print_r like ginger robot suggested Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022084 Share on other sites More sharing options...
aebstract Posted March 5, 2010 Author Share Posted March 5, 2010 I don't want to print it out just for reading. I have to be able to use each piece of information. Just like when you pull it from a database and can do something like this: while($r=mssql_fetch_array($query)){ echo $r[3]; } Except I don't know how to go about this, because that uses mssql_fetch_array and, we aren't fetching an array from a database at this point. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022086 Share on other sites More sharing options...
aebstract Posted March 5, 2010 Author Share Posted March 5, 2010 This code will read the text file and convert it into an array variable. <?php $textData = file('array_data.txt'); $dataArray = array(); $tempArray = array(); $array_start = false; foreach ($textData as $line) { if ($array_start && preg_match("/\[([^\]]*)\] => (.*)/", $line, $keyValue)!= 0) { $tempArray[$keyValue[1]] = $keyValue[2]; } if(substr($line, 0, 1)=='(') { $array_start = true; } if(substr($line, 0, 1)==')') { $array_start = false; $dataArray[] = $tempArray; $tempArray = array(); } } print_r($dataArray); ?> I was giving the serialize a try, but I don't have the time to get it figure out. This worked and I can easily reference any value in the file now. A while loop will be easy to build with this. Thanks a lot. Quote Link to comment https://forums.phpfreaks.com/topic/194276-help-me-loop-through-arrays/#findComment-1022091 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.