Re: [PHP] array question

2010-12-17 Thread Sorin Buturugeanu
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  wrote:

> On Fri, Dec 17, 2010 at 15:52, Sorin Buturugeanu  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:
>
>  /**
>  * mixed return_item( string $car, mixed $pos )
>  *  - $str The original string
>  *  - $charThe 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.
>
> --
> 
> 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
>
>


[PHP] array question

2010-12-17 Thread Sorin Buturugeanu
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.

Cheers and thanks!


Re: [PHP] eval and HEREDOC

2010-07-21 Thread Sorin Buturugeanu
Hi Peter!

In the first version of the template engine I had markers but now I
need more complex conditions or operations inside the template files,
like array of arrays and so on. I really like the freedom to be able
to just open a PHP tag  and use a foreach() or whatever PHP
function as I please.

Thanks again to all of you for your support! :)

Sorin

--
Sorin Buturugeanu
http://www.soin.ro



On Wed, Jul 21, 2010 at 9:47 AM, Peter Lind  wrote:
> On 21 July 2010 06:46, Sorin Buturugeanu  wrote:
>> @Vincent: no, the short tags are not off.
>>
>> @Jim: This seamns to work fine:
>>
>> $template = file_get_contents(pathTemplates.$this->dir.$this->tpl);
>> ob_start();
>> $template = eval('?>'.$template);
>> $template = ob_get_clean();
>>
>> Thanks!
>>
>> Best wishes!
>>
>> Sorin
>>
>>
>> --
>> Sorin Buturugeanu
>> http://www.soin.ro
>>
>>
>>
>>
>> On Wed, Jul 21, 2010 at 1:45 AM,   wrote:
>>>
>>>
>>>
>>> On Wed, 21 Jul 2010 01:04:12 +0300, Sorin Buturugeanu  wrote:
>>>> Hello Vincent and thank you for your reply :).
>>>>
>>>> That's true, I forgot to explain how I got to using HEREDOC, so ..
>>>>
>>>> Using eval(file_get_contents($file)) just outputs the result on the
>>>> spot and I need
>>>> to get the whole output (without echoing it) and do some more things with
>>>> it.
>>>>
>>>> require_once() doesn't fit here (from what I can tell), because it
>>>> would still just
>>>> include the file in echo the output.
>>>>
>>>> I think there must be a solution, but I'm missing something here  ..
>>>
>>>
>>> Check out the ob_* functions
>>>
>>> You could do this
>>>
>>> ob_start();
>>>
>>> include "/your/file.php";
>>>
>>> $output = ob_get_clean();
>>>
>>> echo $output;
>>>
>>> Jim
>>>
>>>>
>>>> Thanks again!
>>>>
>>>> --
>>>> Sorin Buturugeanu
>>>> http://www.soin.ro
>>>>
>>>>
>>>> On Wed, Jul 21, 2010 at 12:49 AM, Daevid Vincent 
>>>> wrote:
>>>>>
>>>>> > -Original Message-
>>>>> > From: Sorin Buturugeanu [mailto:m...@soin.ro]
>>>>> > Sent: Tuesday, July 20, 2010 2:11 PM
>>>>> > To: php-general@lists.php.net
>>>>> > Subject: [PHP] eval and HEREDOC
>>>>> >
>>>>> > Hello,
>>>>> >
>>>>> > I am having trouble with a part of my templating script. I'll
>>>>> > try to explain:
>>>>> >
>>>>> > The template itself is HTML with PHP code inside it, like:
>>>>> >
>>>>> > 
>>>>> >
>>>>> > And I have the following code as part of the templating engine:
>>>>> >
>>>>> > $template = file_get_contents($file);
>>>>> > $template = "return <<>>>> > $template = eval($template);
>>>>> >
>>>>> > The problem is that the eval() HEREDOC combination gives the
>>>>> > following output:
>>>>> >
>>>>> > 
>>>>> >
>>>>> > If in the HTML file (template) I use
>>>>> >
>>>>> > 
>>>>> >
>>>>> > I get   as an output.
>>>>> >
>>>>> > I have tried closing the php tag like this:
>>>>> >
>>>>> > $template = "return <<".$template."\nTEMPLATE;\n";
>>>>> >
>>>>> > but the extra ?> only gets outputed as HTML.
>>>>> >
>>>>> > This is my first post to this mailing list, so I great you
>>>>> > all and thank you for any kind of solution to my problem.
>>>>>
>>>>> Why are you using HEREDOC to begin with? I personally find them to be
>>>> ugly
>>>>> and more trouble than they're worth.
>>>>>
>>>>> You can write the same thing as this I think (untested):
>>>>>
>>>>> $template = eval(file_get_contents($file));
>>>>>
>>>>> But you might also consider using "include_once" or "requi

Re: [PHP] eval and HEREDOC

2010-07-20 Thread Sorin Buturugeanu
@Vincent: no, the short tags are not off.

@Jim: This seamns to work fine:

$template = file_get_contents(pathTemplates.$this->dir.$this->tpl);
ob_start();
$template = eval('?>'.$template);
$template = ob_get_clean();

Thanks!

Best wishes!

Sorin


--
Sorin Buturugeanu
http://www.soin.ro




On Wed, Jul 21, 2010 at 1:45 AM,   wrote:
>
>
>
> On Wed, 21 Jul 2010 01:04:12 +0300, Sorin Buturugeanu  wrote:
>> Hello Vincent and thank you for your reply :).
>>
>> That's true, I forgot to explain how I got to using HEREDOC, so ..
>>
>> Using eval(file_get_contents($file)) just outputs the result on the
>> spot and I need
>> to get the whole output (without echoing it) and do some more things with
>> it.
>>
>> require_once() doesn't fit here (from what I can tell), because it
>> would still just
>> include the file in echo the output.
>>
>> I think there must be a solution, but I'm missing something here  ..
>
>
> Check out the ob_* functions
>
> You could do this
>
> ob_start();
>
> include "/your/file.php";
>
> $output = ob_get_clean();
>
> echo $output;
>
> Jim
>
>>
>> Thanks again!
>>
>> --
>> Sorin Buturugeanu
>> http://www.soin.ro
>>
>>
>> On Wed, Jul 21, 2010 at 12:49 AM, Daevid Vincent 
>> wrote:
>>>
>>> > -Original Message-
>>> > From: Sorin Buturugeanu [mailto:m...@soin.ro]
>>> > Sent: Tuesday, July 20, 2010 2:11 PM
>>> > To: php-general@lists.php.net
>>> > Subject: [PHP] eval and HEREDOC
>>> >
>>> > Hello,
>>> >
>>> > I am having trouble with a part of my templating script. I'll
>>> > try to explain:
>>> >
>>> > The template itself is HTML with PHP code inside it, like:
>>> >
>>> > 
>>> >
>>> > And I have the following code as part of the templating engine:
>>> >
>>> > $template = file_get_contents($file);
>>> > $template = "return <<>> > $template = eval($template);
>>> >
>>> > The problem is that the eval() HEREDOC combination gives the
>>> > following output:
>>> >
>>> > 
>>> >
>>> > If in the HTML file (template) I use
>>> >
>>> > 
>>> >
>>> > I get   as an output.
>>> >
>>> > I have tried closing the php tag like this:
>>> >
>>> > $template = "return <<".$template."\nTEMPLATE;\n";
>>> >
>>> > but the extra ?> only gets outputed as HTML.
>>> >
>>> > This is my first post to this mailing list, so I great you
>>> > all and thank you for any kind of solution to my problem.
>>>
>>> Why are you using HEREDOC to begin with? I personally find them to be
>> ugly
>>> and more trouble than they're worth.
>>>
>>> You can write the same thing as this I think (untested):
>>>
>>> $template = eval(file_get_contents($file));
>>>
>>> But you might also consider using "include_once" or "require_once"
>> instead
>>> of this "eval()" business.
>>>
>>> Also note, that a string can span more than one line and have variables
>> in
>>> it. It can even be used with code, so HEREDOC is again useless for most
>>> situations:
>>>
>>> $foo = "
>>> Hello $name,\n
>>> \n
>>> Today is ".date('Y-m-d')."\n
>>> \n
>>> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
>>> \n
>>> Nulla eros purus, pharetra a blandit non, pellentesque et leo. In augue
>>> metus, mattis a sollicitudin in, placerat vitae elit.
>>> \n
>>> Quisque elit mauris, varius sit amet cursus sed, eleifend a mauris.
>>> ";
>>>
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>
>
> --
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] eval and HEREDOC

2010-07-20 Thread Sorin Buturugeanu
Hello Vincent and thank you for your reply :).

That's true, I forgot to explain how I got to using HEREDOC, so ..

Using eval(file_get_contents($file)) just outputs the result on the
spot and I need
to get the whole output (without echoing it) and do some more things with it.

require_once() doesn't fit here (from what I can tell), because it
would still just
include the file in echo the output.

I think there must be a solution, but I'm missing something here  ..

Thanks again!

--
Sorin Buturugeanu
http://www.soin.ro


On Wed, Jul 21, 2010 at 12:49 AM, Daevid Vincent  wrote:
>
> > -Original Message-
> > From: Sorin Buturugeanu [mailto:m...@soin.ro]
> > Sent: Tuesday, July 20, 2010 2:11 PM
> > To: php-general@lists.php.net
> > Subject: [PHP] eval and HEREDOC
> >
> > Hello,
> >
> > I am having trouble with a part of my templating script. I'll
> > try to explain:
> >
> > The template itself is HTML with PHP code inside it, like:
> >
> > 
> >
> > And I have the following code as part of the templating engine:
> >
> > $template = file_get_contents($file);
> > $template = "return << > $template = eval($template);
> >
> > The problem is that the eval() HEREDOC combination gives the
> > following output:
> >
> > 
> >
> > If in the HTML file (template) I use
> >
> > 
> >
> > I get   as an output.
> >
> > I have tried closing the php tag like this:
> >
> > $template = "return <<".$template."\nTEMPLATE;\n";
> >
> > but the extra ?> only gets outputed as HTML.
> >
> > This is my first post to this mailing list, so I great you
> > all and thank you for any kind of solution to my problem.
>
> Why are you using HEREDOC to begin with? I personally find them to be ugly
> and more trouble than they're worth.
>
> You can write the same thing as this I think (untested):
>
> $template = eval(file_get_contents($file));
>
> But you might also consider using "include_once" or "require_once" instead
> of this "eval()" business.
>
> Also note, that a string can span more than one line and have variables in
> it. It can even be used with code, so HEREDOC is again useless for most
> situations:
>
> $foo = "
> Hello $name,\n
> \n
> Today is ".date('Y-m-d')."\n
> \n
> Lorem ipsum dolor sit amet, consectetur adipiscing elit.
> \n
> Nulla eros purus, pharetra a blandit non, pellentesque et leo. In augue
> metus, mattis a sollicitudin in, placerat vitae elit.
> \n
> Quisque elit mauris, varius sit amet cursus sed, eleifend a mauris.
> ";
>

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP] eval and HEREDOC

2010-07-20 Thread Sorin Buturugeanu
Hello,

I am having trouble with a part of my templating script. I'll try to explain:

The template itself is HTML with PHP code inside it, like:



And I have the following code as part of the templating engine:

$template = file_get_contents($file);
$template = "return <<

If in the HTML file (template) I use



I get   as an output.

I have tried closing the php tag like this:

$template = "return <<".$template."\nTEMPLATE;\n";

but the extra ?> only gets outputed as HTML.

This is my first post to this mailing list, so I great you all and thank you for
any kind of solution to my problem.

Thank you!

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php