viviosoft Posted April 25, 2011 Share Posted April 25, 2011 Hello all, I want to be able to trim data using an array. For example: I have: REF*19**PHILADELPHIA 02 REF*GG*CUT PILE Which both are separate lines in an array. I want to remove REF*19** and REF*GG* from each and be left with PHILADELPHIA 02 and CUT PILE. I was hoping I could use an array to remove the unwanted data from each line and rebuild the array? Here's what I have currently. Which of course, throws an error. I tried in_array() but maybe I just didn't use it correctly? Thanks for any help you can provide me. <?php $unwantedData = array ('REF*19**', 'REF*GG*' ); $lineArray = array('REF*19**PHILADELPHIA 02', 'REF*GG*CUT PILE'); $newEdiArray = ""; for ($i=0; $i<count($lineArray); $i++) { $line = $lineArray[$i]; $newLine = ltrim( $line, $unwantedData ); $newEdiArray[] = $newLine; } ?> Link to comment https://forums.phpfreaks.com/topic/234676-ltrim-and-array/ Share on other sites More sharing options...
Psycho Posted April 25, 2011 Share Posted April 25, 2011 Give this a try function removeRef(&$value) { $value = preg_replace("#^REF\*+[^\*]+\*+#", "", $value); } $lineArray = array('REF*19**PHILADELPHIA 02', 'REF*GG*CUT PILE'); array_walk($lineArray, 'removeRef'); print_r($lineArray); Output: Array ( [0] => PHILADELPHIA 02 [1] => CUT PILE ) NOTE: This will remove the text at the beginning of the value if it matches the following criteria: 1. Begins with "REF" 2. followed by one or more asterisks 3. followed by one or more non asterisks 4. followed by one or more asterisks Link to comment https://forums.phpfreaks.com/topic/234676-ltrim-and-array/#findComment-1205969 Share on other sites More sharing options...
viviosoft Posted April 25, 2011 Author Share Posted April 25, 2011 Thanks for the quick reply. I should have been a bit more clear. The values that get removed will have different $values. For example: they might not all have "REF" in them so I'm not sure that the solution provided will work. They could be PID*F*MAC*** or MEA**LN* or PID*F*73***, etc. Link to comment https://forums.phpfreaks.com/topic/234676-ltrim-and-array/#findComment-1205971 Share on other sites More sharing options...
viviosoft Posted April 25, 2011 Author Share Posted April 25, 2011 I ended up using str_replace(); thanks for the help mjdamato! You actually helped get me on the right track. <?php $searchFor = array('REF*19**', 'REF*GG*'); $lineArray = array('REF*19**PHILADELPHIA 02', 'REF*GG*CUT PILE'); $newEdiArray = ""; for ($i=0; $i<count($lineArray); $i++) { $line = $lineArray[$i]; $newLine = str_replace( $searchFor, "", $line ); $newEdiArray[] = $newLine; } ?> Link to comment https://forums.phpfreaks.com/topic/234676-ltrim-and-array/#findComment-1205994 Share on other sites More sharing options...
Psycho Posted April 25, 2011 Share Posted April 25, 2011 This is more efficient. function removeRef(&$value, $key, $searchAry) { $value = str_replace($searchAry, "", $value); } $searchFor = array('REF*19**', 'REF*GG*', 'PID*F*MAC***'); $lineArray = array('REF*19**PHILADELPHIA 02', 'REF*GG*CUT PILE', 'PID*F*MAC***Another name'); array_walk($lineArray, 'removeRef', $searchFor); Link to comment https://forums.phpfreaks.com/topic/234676-ltrim-and-array/#findComment-1206082 Share on other sites More sharing options...
salathe Posted April 26, 2011 Share Posted April 26, 2011 <?php $searchFor = array('REF*19**', 'REF*GG*'); $lineArray = array('REF*19**PHILADELPHIA 02', 'REF*GG*CUT PILE'); $newEdiArray = ""; for ($i=0; $i<count($lineArray); $i++) { $line = $lineArray[$i]; $newLine = str_replace( $searchFor, "", $line ); $newEdiArray[] = $newLine; } ?> That could be rewritten simply as $searchFor = array('REF*19**', 'REF*GG*'); $lineArray = array('REF*19**PHILADELPHIA 02', 'REF*GG*CUT PILE'); $newEdiArray = str_replace($searchFor, '', $lineArray); Link to comment https://forums.phpfreaks.com/topic/234676-ltrim-and-array/#findComment-1206411 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.