if i have <246.64260, 167.12500, 24.62500>
each number can be from 1 to 256. I need to get it in to $X as 246, $Y as 167 and $Z as 24
How would i do this? I was thinking to remove all the spaces and them explode to get
X 246.64260
Y 167.12500
Z 24.62500
then explode again to get X 246 Y 167 Z 24
Is this the best way of doing this?
I'm going to blow your mind and do it really easily in one line (two if you count the string):
$str = '<246.64260, 167.12500, 24.62500>';
list( $X, $Y, $Z ) = array_map( 'intval', explode( ',', trim( $str, '<>' ) ) );
This will trim off the leading GT and LT characters, then explode the numbers into an array using the commas. Leading whitespace (surprisingly) doesn't matter with intval so it is simply mapped to the separated array and then the results are separated into the $X
, $Y
, and $Z
variables you asked for.
$input = '<246.64260, 167.12500, 24.62500>';
$output = str_replace(array('<','>',' '), '', $input);
$output = explode(',', $output);
$output = array_map('intval', $output);
list($X, $Y, $Z) = $output;
$string = '<246.64260, 167.12500, 24.62500>';
$str_esc = str_replace(array('<','>',' '), '', $string );
$output = explode(',', $str_esc);
$output = array_map('intval', $output);
echo "<pre>";
print_r($output);
reference
$str = '<246.64260, 167.12500, 24.62500>';
$str = substr(1, strlen(trim($str)) - 1);
$array = explode(',' , $str);
$array = array_map('intval', $array);
list($X, $Y, $Z) = $array;
Probably not the most efficient method, but you could use preg_match_all to put the truncated integer values into a 2D array and move it into X, Y and Z from there.
So something like:
$input = "<246.64260, 167.12500, 24.62500>";
$matches = array();
preg_match_all("([0-9]+)\.[0-9]+", $input, $matches);
$x = $matches[0][0];
$y = $matches[1][0];
$z = $matches[2][0];