Tanks for all of your responses! I guess a function is the way to go. I just have to see if the situation comes up enough times to justify the function approach. @Dan: I really enjoyed your disclaimer :D -- Sorin Buturugeanu www.soin.ro <http://www.facebook.com/buturugeanu> <http://www.twitter.com/soinro><http://www.soin.ro/feed/blog>blog: Despre Launch48 si ce poti face in 2 zile <http://www.soin.ro/b75> On 17 December 2010 23:48, Daniel Brown <danbrown@xxxxxxx> wrote: > On Fri, Dec 17, 2010 at 15:52, Sorin Buturugeanu <mail@xxxxxxx> wrote: > > Hello all! > > > > I have a question regarding arrays and the way I can use a value. > > > > Let's say I have this string: > > > > $s = 'banana,apple,mellon,grape,nut,orange' > > > > I want to explode it, and get the third value. For this I would normally > do: > > > > $a = explode(',', $s); > > echo $s[2]; > > > > That's all fine, but is there a way to get the value directly, without > > having to write another line in my script. I mean something like this: > > > > echo explode(',', $s)[2]; > > > > or > > > > echo {explode(',', $s)}[2]; > > > > I couldn't find out this answer anywhere, that's why I posted here. > > Unfortunately, no --- at least, not yet. Chaining discussions > come up now and again, so it's quite possible that future versions of > PHP will have something similar. That said, for now you could do > something like this: > > <?php > /** > * mixed return_item( string $car, mixed $pos ) > * - $str The original string > * - $char The delimiting character(s) by which to explode > * - $pos The position to return > * - $shift Whether or not we should see 1 as the first array position > */ > function return_item($str,$char,$pos=null,$shift=false) { > > // Make sure $char exists in $str, return false if not. > if (!strpos($str,$char)) return false; > > // Split $char by $str into the array $arr > $arr = explode($char,$str); > > // If $pos undefined or null, return the whole array > if (is_null($pos)) return $arr; > > // If $pos is an array, return the requested positions > if (isset($pos) && is_array($pos) && !empty($pos)) { > > // Instantiate a second array container for return > $ret = array(); > > // Iterate > foreach ($pos as $i) { > > // This is just in case it was given screwy or a number as > a non-integer.... > if (!is_int($i) && is_numeric($i)) $i = (int)round($i); > > // Make sure $i is now an integer and that position exists > if (!is_int($i) || !isset($arr[$i]) || empty($arr[$i])) > continue; > > // If all seems okay, append this to $ret > $ret[] = $arr[$i]; > } > > // Return the array > return $ret; > } > > /** > * If $pos is a number (integer or round()'able number), > * we'll go ahead and make sure the position is there. > * If so, we'll return it. > */ > if (is_int($pos) || is_numeric($pos)) { > > // This is just in case it was given screwy or as a non-integer > if (!is_int($pos)) $pos = (int)round($pos); > > // If we want to start the array count at 1, do that now.... > if (isset($shift) && ($shift === true || $shift === 1)) { > > // .... but only if the number isn't zero > if ($pos !== 0) --$pos; > > } > > // Return the single position if it exists > if (isset($arr[$pos]) && !empty($arr[$pos])) return $arr[$pos]; > } > > /** > * If we've failed every case, something is either > * wrong or we supplied bad data. Return false. > * Either way, feel free to add some trigger_error() > * stuff here if you want to have the function hold > * your hand. > */ > return false; > } > > > > /** > * Some simple examples > */ > > $foo = > 'apple,banana,carrot,orange,carrot,lettuce,tomato,beer,carrot,idiot'; > > return_item($foo,',',7); // Returns 'beer' > return_item($foo,'carrot',0); // Returns 'apple,banana,' > return_item($foo,','); // Returns all items in an array > return_item($foo,',',array(0,'2',6.6)); // Returns array: apple,carrot,beer > return_item($foo,',',1,true); // Returns 'apple' > ?> > > > Of course, as with almost all code I submit here, it's typed > directly into this window and is untested, so you use it at your own > risk, your mileage may vary, see a doctor if you have an erection > lasting more than four hours, et cetera. > > Happy Friday, all. > > -- > </Daniel P. Brown> > Network Infrastructure Manager > Documentation, Webmaster Teams > http://www.php.net/ > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > >