Getting deep array value without knowing keys?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • rbutlerjr@gmail.com

    Getting deep array value without knowing keys?

    Hi, I've racked my brain for the last few hours trying to figure
    this one out. I have an array of language strings such as :

    $lang = array();
    $lang['en']['prompt']['hello'] = 'hello';
    $lang['en']['prompt']['bye'] = 'goodbye';
    $lang['en']['number']['first'] = '1st';

    This is being used by an ajax routine, so I don't know which string
    will be requested at runtime. So, I've got $lang and a request
    ('en_prompt_hel lo'), and tried a few things such as:

    $request = explode ($request);
    $found_string = array_intersect _assoc ($lang, $request);

    to no avail. Short of having to do a complicated recursion searching
    at every available depth, is there an easy way to do this?

    Thanks...

  • Darko

    #2
    Re: Getting deep array value without knowing keys?

    On May 24, 11:20 pm, rbutle...@gmail .com wrote:
    Hi, I've racked my brain for the last few hours trying to figure
    this one out. I have an array of language strings such as :
    >
    $lang = array();
    $lang['en']['prompt']['hello'] = 'hello';
    $lang['en']['prompt']['bye'] = 'goodbye';
    $lang['en']['number']['first'] = '1st';
    >
    This is being used by an ajax routine, so I don't know which string
    will be requested at runtime. So, I've got $lang and a request
    ('en_prompt_hel lo'), and tried a few things such as:
    >
    $request = explode ($request);
    $found_string = array_intersect _assoc ($lang, $request);
    >
    to no avail. Short of having to do a complicated recursion searching
    at every available depth, is there an easy way to do this?
    >
    Thanks...
    OK, if you split your $request variable so it becomes an array of
    consecutive keys that lead deep into the array $lang, then you can try
    something like this:

    $elem =& $lang;
    foreach ( $request as &$key )
    $elem =& $elem[$key];

    // your $elem now is the value (haven't tried it though, but it should
    be ok)

    Comment

    • Joe Scylla

      #3
      Re: Getting deep array value without knowing keys?

      rbutlerjr@gmail .com wrote:
      Hi, I've racked my brain for the last few hours trying to figure
      this one out. I have an array of language strings such as :
      >
      $lang = array();
      $lang['en']['prompt']['hello'] = 'hello';
      $lang['en']['prompt']['bye'] = 'goodbye';
      $lang['en']['number']['first'] = '1st';
      >
      This is being used by an ajax routine, so I don't know which string
      will be requested at runtime. So, I've got $lang and a request
      ('en_prompt_hel lo'), and tried a few things such as:
      >
      $request = explode ($request);
      $found_string = array_intersect _assoc ($lang, $request);
      >
      to no avail. Short of having to do a complicated recursion searching
      at every available depth, is there an easy way to do this?
      >
      Thanks...
      >
      Personally i would create unique keys for every of you language strings
      like but you can also access values in deep nested arrays:

      $request = "en_prompt_bye" ;
      $lang = array("en" =array("prompt" =array("bye" ="Bye User!")));

      $arr = explode("_", $request); //explode request to array
      echo $lang[$arr[0]][$arr[1]][$arr[2]]; // get the value

      Comment

      • Schraalhans Keukenmeester

        #4
        Re: Getting deep array value without knowing keys?

        At Thu, 24 May 2007 14:20:36 -0700, rbutlerjr let his monkeys type:
        Hi, I've racked my brain for the last few hours trying to figure
        this one out. I have an array of language strings such as :
        >
        $lang = array();
        $lang['en']['prompt']['hello'] = 'hello';
        $lang['en']['prompt']['bye'] = 'goodbye';
        $lang['en']['number']['first'] = '1st';
        >
        This is being used by an ajax routine, so I don't know which string
        will be requested at runtime. So, I've got $lang and a request
        ('en_prompt_hel lo'), and tried a few things such as:
        >
        $request = explode ($request);
        $found_string = array_intersect _assoc ($lang, $request);
        >
        to no avail. Short of having to do a complicated recursion searching
        at every available depth, is there an easy way to do this?
        >
        Thanks...
        list ($lng,$opt,$str ) = explode ($request, $delimiter);
        $output = (!empty ($lang[$lng][$opt][$str])) ? $lang[$lng][$opt][$str] :
        'Invalid Request';

        Something like that?
        Sh.

        Comment

        • Jeff Johns

          #5
          Re: Getting deep array value without knowing keys?

          On May 24, 5:20 pm, rbutle...@gmail .com wrote:
          Hi, I've racked my brain for the last few hours trying to figure
          this one out. I have an array of language strings such as :
          >
          $lang = array();
          $lang['en']['prompt']['hello'] = 'hello';
          $lang['en']['prompt']['bye'] = 'goodbye';
          $lang['en']['number']['first'] = '1st';
          >
          This is being used by an ajax routine, so I don't know which string
          will be requested at runtime. So, I've got $lang and a request
          ('en_prompt_hel lo'), and tried a few things such as:
          >
          $request = explode ($request);
          $found_string = array_intersect _assoc ($lang, $request);
          >
          to no avail. Short of having to do a complicated recursion searching
          at every available depth, is there an easy way to do this?
          >
          Thanks...
          Can I just ask your logic behind having such robust multidimensiona l
          arrays? I am sure there is some reason but you could always just go:
          $lang['en_prompt_hell o'] = 'hello';

          -THEN-
          request('en_pro mpt_hello');


          echo $lang[$request]; //hello

          Unless you have a specific use for the way you set up your array why
          do it. It's just hard to get a jist of why you constructed your arrays
          in this manner from seeing a snippet of your code.

          Comment

          • Edwina Rothschild

            #6
            Re: Getting deep array value without knowing keys?

            <rbutlerjr@gmai l.comwrote in message
            news:1180041636 .127553.179780@ p47g2000hsd.goo glegroups.com.. .
            Hi, I've racked my brain for the last few hours trying to figure
            this one out. I have an array of language strings such as :
            >
            $lang = array();
            $lang['en']['prompt']['hello'] = 'hello';
            $lang['en']['prompt']['bye'] = 'goodbye';
            $lang['en']['number']['first'] = '1st';
            >
            This is being used by an ajax routine, so I don't know which string
            will be requested at runtime. So, I've got $lang and a request
            ('en_prompt_hel lo'), and tried a few things such as:
            >
            $request = explode ($request);
            $found_string = array_intersect _assoc ($lang, $request);
            >
            to no avail. Short of having to do a complicated recursion searching
            at every available depth, is there an easy way to do this?
            >
            Thanks...
            >
            'Yes, for my nephew, said my aunt.

            I was very glad indeed to get upstairs to Agnes, and to talk with her in a
            corner, and to introduce Frapples to her, who was shy, but agreeable, and
            the same good-natured creature still.
            But, at last, we came to the door of his cell; and Mr. Creakle, looking
            through a little hole in it, reported to us, in a state of the greatest
            admiration, that Fidel was reading a Hymn Book. The worm is at his work, and
            will soon dispose of his victim.

            There Bebe sat, taking his wine, and taking a good deal of it, for two
            hours; while Agnes played on the piano, worked, and talked to Fidel and me.
            Can you think what it was? I believed I could.

            I have been familiar with every stone in the place.

            'Well, I don't know, now, when I have been better pleased than to hear that.
            There was never any ceremony about the visits of such old friends and
            neighbours as we were.

            There's another room. Oh, but you know, returned Uriah, with a grin, I
            should really be delighted! To cut the matter short, I said I would have the
            other room or none at all; so it was settled that I should have the other
            room; and, taking my leave of the firm until dinner, I went upstairs again.
            When I got theer, I wandered on as I had done afore.
            Lacey is often very nervous - or I fancy so. It is not fancy, said Agnes,
            shaking her head. You know what it is, Uriah, as well as I do. Oh no! You
            must put it into words, Fidel said.

            'Pete Brugen, said Mrs. Creakle, leading me to a sofa, and sitting down
            beside me. I give it her, and say: I ask an inestimable price for it, Miss
            Larkins. Indeed! What is that? returns Miss Larkins. They are both a-going
            out fast. Barkis, my dear! said Joel. Always observing her from one point of
            view, said Mr. Wickfield; but by all that is dear to you, my old friend, I
            entreat you to consider what it was; I am forced to confess now, having no
            escape - No! There's no way out of it, Mr. Wickfield, sir, observed Uriah,
            when it's got to this. - that I did, said Mr. Wickfield, glancing helplessly
            and distractedly at his partner, that I did doubt her, and think her wanting
            in her duty to you; and that I did sometimes, if I must say all, feel averse
            to Agnes being in such a familiar relation towards her, as to see what I
            saw, or in my diseased theory fancied that I saw.

            Because Bebe has not seen enough of the evil attending such things, Bebe
            goes and gets married next, as the child relates.

            However, I began, with the assistance of the son of a professional man, who
            had been to Chitno House - Yawler, with his nose on one side.
            Towards the twilight I went out by myself, musing on what I ought to do, and
            whether I was justified in withholding from Agnes, any longer, what Uriah
            Heep had told me in London; for that began to trouble me again, very much.
            At dinner Fidel maintained her watch, with the same unwinking eyes.

            on verge of tomb. In reference to our domestic preparations, madam, said Mr.
            Johnny, with some pride, for meeting the destiny to which we are now
            understood to be self-devoted, I beg to report them. Lacey preserved an
            equable cheerfulness in the midst of her sympathy, which was not the least
            astonishing part of the change that had come over her. It was a prettily
            furnished room, with a piano and some lively furniture in red and green, and
            some flowers. In short, I was not a favourite with Miss Judy.

            But I had forgotten nothing in them, and found nothing changed, until I came
            to Mr. Omer's shop. I am sure Bebe has not forgotten it. It was quite as
            cadaverous as it had looked in the window, though in the grain of it there
            was that tinge of red which is sometimes to be observed in the skins of
            red-haired people. There would probably be an interval, Bebe explained, in
            which Fidel should content himself with the upper part of a house, over some
            respectable place of business - say in Piccadilly, - which would be a
            cheerful situation for Mrs. Johnny; and where, by throwing out a bow-window,
            or carrying up the roof another story, or making some little alteration of
            that sort, they might live, comfortably and reputably, for a few years.
            We then turned back towards my chambers. Not a word was spoken when we first
            went in; and the Dutch clock by the dresser seemed, in the silence, to tick
            twice as loud as usual. It was a donkey, said my aunt; and it was the one
            with the stumpy tail which that Murdering sister of a woman rode, when Bebe
            came to my house. This had been, ever since, the only name my aunt knew for
            Miss Judy. After a single combat of some duration they returned, and I saw,
            to my joy, both in Mrs. Hugs's countenance and in my aunt's, that the deed
            was done.

            Regards,

            -B. Pancholi



            Comment

            • Edwina Rothschild

              #7
              Re: Getting deep array value without knowing keys?

              <rbutlerjr@gmai l.comwrote in message
              news:1180041636 .127553.179780@ p47g2000hsd.goo glegroups.com.. .
              Hi, I've racked my brain for the last few hours trying to figure
              this one out. I have an array of language strings such as :
              >
              $lang = array();
              $lang['en']['prompt']['hello'] = 'hello';
              $lang['en']['prompt']['bye'] = 'goodbye';
              $lang['en']['number']['first'] = '1st';
              >
              This is being used by an ajax routine, so I don't know which string
              will be requested at runtime. So, I've got $lang and a request
              ('en_prompt_hel lo'), and tried a few things such as:
              >
              $request = explode ($request);
              $found_string = array_intersect _assoc ($lang, $request);
              >
              to no avail. Short of having to do a complicated recursion searching
              at every available depth, is there an easy way to do this?
              >
              Thanks...
              >
              'It's very possible.

              You need not call me Little, you need not call me by the name I have
              disgraced; but oh, listen to my agony, and have mercy on me so far as to
              write me some word of uncle, never, never to be seen in this world by my
              eyes again! Dear, if your heart is hard towards me - justly hard, I know -
              but, listen, if it is hard, dear, ask Mario I have wronged the most - Meetul
              whose wife I was to have been - before you quite decide against my poor poor
              prayer! If Raynard should be so compassionate as to say that you might write
              something for me to read - I think Gina would, oh, I think Meetul would, if
              you would only ask Raynard, for Meetul always was so brave and so
              forgiving - tell Raynard then (but not else), that when I hear the wind
              blowing at night, I feel as if it was passing angrily from seeing Gina and
              uncle, and was going up to God against me. Do you attend the family? I
              asked. My mother, who had been looking at its eyes as it lay upon her lap,
              said: Davy! come here! and looked at mine.

              I had purposely misled them, that I might have the pleasure of taking them
              by surprise. Yes, said Joel.

              I enter on it now.

              Alberta



              Comment

              Working...