[nycphp-talk] Re: Passing array elements as... strings?
Mark Armendariz
enolists at gmail.com
Thu Jan 4 15:17:20 EST 2007
oh, and here's my output after choosing 'quux' (with the error truncated -
also added note by *'s)
Post Array: Array
(
[foo] => Array
(
[bar] => 2
)
)
foo: foo Object
(
[bar] => Array
(
[0] => quiz
[1] => quuz
[2] => quux
)
)
foo->bar: Array
(
[0] => quiz
[1] => quuz
[2] => quux
)
Notice: Undefined property: r on line 18
***** foo->bar[2] == 'Array' so foo->bar[2] == 'r'? ***
Direct Access - throws error:
Copied Array - should work: quux
On 1/4/07, Mark Armendariz <enolists at gmail.com> wrote:
>
> decided to play with this a bit. first time i've ever found myself using
> variable variables. dunno if it helps at all, but here's what i came up
> with (4.4.1, but should apply anywhere). it seems you can't access the
> array values directly, but copying it works. You could also use var vars
> for object properties instead if you wanted to go that route. It seems to
> me this could be nested as deeply as necessary as well.
>
> <?php
> include_once 'base/function.debug.php';
> dbg($_POST, 'Post Array');
>
> class foo {
> function foo() {}
> }
>
> $foo = new foo;
> $foo->bar = array( 0=>'quiz', 1=>'quuz', 2=>'quux' );
>
> // loop through our posted vars
> foreach(array_keys($_POST) as $sObject) {
> // if we've posted an object, open'r up
> if (is_object($$sObject)) {
> dbg($$sObject, $sObject);
>
> foreach($_POST[$sObject] as $sProperty => $mValue) {
> // print out the property - boo, which is an array
> dbg($$sObject->$sProperty, $sObject . '->' . $sProperty);
>
> // try showing the array's value
> dbg($$sObject->$sProperty[$mValue], 'Direct Access -
> throws error');
>
> // now copy the array and then show it
> $theArray = $$sObject->$sProperty;
> dbg($theArray[$mValue], 'Copied Array - should work');
> }
> }
> }
> ?>
>
> <form method="post">
> <?php foreach($foo->bar as $mValue => $sDisplay) { ?>
> <label for="foo_bar_<?= $mValue ?>">
> <input type="radio"
> name="foo[bar]"
> value="<?= $mValue ?>"
> id="foo_bar_<?= $mValue ?>"
> <?= ($mValue == $_POST['foo']['bar']) ?
> 'checked="checked"' : '' ?> /> <?= $sDisplay ?>
> </label><br />
> <?php } ?>
> <input type="submit" />
> </form>
>
>
>
> and my debug function:
>
> <?php
> function dbg($mVar, $sTitle = '') {
> $sReturn = '';
>
> if (strlen($sTitle)) {
> $sReturn .= $sTitle .= ': ';
> }
>
> $sReturn .= '<pre>' . print_r($mVar, 1) . '</pre>';
> }
> ?>
>
>
> On 1/4/07, Tom Melendez <tom at supertom.com> wrote:
> >
> > On 1/4/07, Nate Abele <nate at cakephp.org> wrote:
> > > Two solutions that come to mind are to (a) parse out the var name and
> > > the index from the string, or (b) submit the var name and the index
> > > as two separate POST vars. Any reason either of those wouldn't work?
> >
> > That's what I came up with too.
> > $key = "bar[1]";
> > preg_match("/(.*)\[(\d)\]/",$key,$m);
> > $name=$m[1];
> > $index=$m[2];
> > $myarray=$foo->$name;
> > print $myarray[$index];
> >
> > Very interested in other solutions. If bar comes in as an array (like
> > $_POST[bar][1]) you could probably use array_keys to suck out keys,
> > although I haven't tried it.
> >
> > Tom
> > http://www.liphp.org
> > _______________________________________________
> > New York PHP Community Talk Mailing List
> > http://lists.nyphp.org/mailman/listinfo/talk
> >
> > NYPHPCon 2006 Presentations Online
> > http://www.nyphpcon.com
> >
> > Show Your Participation in New York PHP
> > http://www.nyphp.org/show_participation.php
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.nyphp.org/pipermail/talk/attachments/20070104/77b39ad4/attachment.html>
More information about the talk
mailing list