Retrieving array values by range of keys

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • WildernessCat

    Retrieving array values by range of keys

    Hello there!

    Suppose I have an associative array that looks like this:
    $arr['alpha_1'] = 'some value';
    $arr['alpha_3'] = 'some value';
    $arr['alpha_4'] = 'some value';
    $arr['beta_2'] = 'some value';
    $arr['beta_4'] = 'some value';
    $arr['beta_6'] = 'some value';
    $arr['gamma_1'] = 'some value';
    $arr['gamma_5'] = 'some value';
    $arr['gamma_6'] = 'some value';
    $arr['gamma_7'] = 'some value';

    Let's assume that the array is reasonably large (hundreds of entries).

    Is there an efficient way of getting all the items whose key starts
    with 'beta'? (without doing a foreach/strncmp loop?)

    Thanks in advance,
    Danny

  • Captain Paralytic

    #2
    Re: Retrieving array values by range of keys

    On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
    Hello there!
    >
    Suppose I have an associative array that looks like this:
    $arr['alpha_1'] = 'some value';
    $arr['alpha_3'] = 'some value';
    $arr['alpha_4'] = 'some value';
    $arr['beta_2'] = 'some value';
    $arr['beta_4'] = 'some value';
    $arr['beta_6'] = 'some value';
    $arr['gamma_1'] = 'some value';
    $arr['gamma_5'] = 'some value';
    $arr['gamma_6'] = 'some value';
    $arr['gamma_7'] = 'some value';
    >
    Let's assume that the array is reasonably large (hundreds of entries).
    >
    Is there an efficient way of getting all the items whose key starts
    with 'beta'? (without doing a foreach/strncmp loop?)
    >
    Thanks in advance,
    Danny
    Something like:

    preg_grep('/^beta/',array_keys($a rr));

    should give you all the keys that start with 'beta'

    Comment

    • Sanders Kaufman

      #3
      Re: Retrieving array values by range of keys

      "Captain Paralytic" <paul_lautman@y ahoo.comwrote in message
      news:1192454252 .346643.76180@i 13g2000prf.goog legroups.com...
      On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
      >Hello there!
      >>
      >Suppose I have an associative array that looks like this:
      >$arr['alpha_1'] = 'some value';
      >$arr['alpha_3'] = 'some value';
      >$arr['alpha_4'] = 'some value';
      >$arr['beta_2'] = 'some value';
      >$arr['beta_4'] = 'some value';
      >$arr['beta_6'] = 'some value';
      >$arr['gamma_1'] = 'some value';
      >$arr['gamma_5'] = 'some value';
      >$arr['gamma_6'] = 'some value';
      >$arr['gamma_7'] = 'some value';
      >>
      >Let's assume that the array is reasonably large (hundreds of entries).
      >>
      >Is there an efficient way of getting all the items whose key starts
      >with 'beta'? (without doing a foreach/strncmp loop?)
      >>
      >Thanks in advance,
      >Danny
      >
      Something like:
      >
      preg_grep('/^beta/',array_keys($a rr));
      >
      should give you all the keys that start with 'beta'
      What does the return value look like - array? string?


      Comment

      • WildernessCat

        #4
        Re: Retrieving array values by range of keys

        On Oct 15, 3:17 pm, Captain Paralytic <paul_laut...@y ahoo.comwrote:
        On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
        >
        >
        >
        Hello there!
        >
        Suppose I have an associative array that looks like this:
        $arr['alpha_1'] = 'some value';
        $arr['alpha_3'] = 'some value';
        $arr['alpha_4'] = 'some value';
        $arr['beta_2'] = 'some value';
        $arr['beta_4'] = 'some value';
        $arr['beta_6'] = 'some value';
        $arr['gamma_1'] = 'some value';
        $arr['gamma_5'] = 'some value';
        $arr['gamma_6'] = 'some value';
        $arr['gamma_7'] = 'some value';
        >
        Let's assume that the array is reasonably large (hundreds of entries).
        >
        Is there an efficient way of getting all the items whose key starts
        with 'beta'? (without doing a foreach/strncmp loop?)
        >
        Thanks in advance,
        Danny
        >
        Something like:
        >
        preg_grep('/^beta/',array_keys($a rr));
        >
        should give you all the keys that start with 'beta'
        Yes, it sure looks more compact in the code, but the question is
        whether it's more efficient? I have a gut feeling that there is no
        efficient way.

        By the way I forgot to mention that the array is not sorted.

        Comment

        • Captain Paralytic

          #5
          Re: Retrieving array values by range of keys

          On 15 Oct, 14:37, "Sanders Kaufman" <bu...@kaufman. netwrote:
          "Captain Paralytic" <paul_laut...@y ahoo.comwrote in message
          >
          news:1192454252 .346643.76180@i 13g2000prf.goog legroups.com...
          >
          >
          >
          >
          >
          On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
          Hello there!
          >
          Suppose I have an associative array that looks like this:
          $arr['alpha_1'] = 'some value';
          $arr['alpha_3'] = 'some value';
          $arr['alpha_4'] = 'some value';
          $arr['beta_2'] = 'some value';
          $arr['beta_4'] = 'some value';
          $arr['beta_6'] = 'some value';
          $arr['gamma_1'] = 'some value';
          $arr['gamma_5'] = 'some value';
          $arr['gamma_6'] = 'some value';
          $arr['gamma_7'] = 'some value';
          >
          Let's assume that the array is reasonably large (hundreds of entries).
          >
          Is there an efficient way of getting all the items whose key starts
          with 'beta'? (without doing a foreach/strncmp loop?)
          >
          Thanks in advance,
          Danny
          >
          Something like:
          >
          preg_grep('/^beta/',array_keys($a rr));
          >
          should give you all the keys that start with 'beta'
          >
          What does the return value look like - array? string?- Hide quoted text -
          >
          - Show quoted text -
          Why ask me when you can just go to:

          and read it there?

          Note that this won't solve the OP's whole problem as he wants the
          values rather than the keys, but it's a start.

          Comment

          • Sanders Kaufman

            #6
            Re: Retrieving array values by range of keys

            "Captain Paralytic" <paul_lautman@y ahoo.comwrote in message
            news:1192455950 .972135.168750@ i38g2000prf.goo glegroups.com.. .
            On 15 Oct, 14:37, "Sanders Kaufman" <bu...@kaufman. netwrote:
            preg_grep('/^beta/',array_keys($a rr));
            >>
            should give you all the keys that start with 'beta'
            >>
            >What does the return value look like - array? string?- Hide quoted
            >text -
            >>
            >- Show quoted text -
            >
            Why ask me when you can just go to:

            and read it there?
            Because, after a bout with meningitis, my brain doesn't work as well as it
            used to.
            I read one page after another - and have no idea what I read.
            But when I discuss - it registers.


            Comment

            • Captain Paralytic

              #7
              Re: Retrieving array values by range of keys

              On 15 Oct, 14:43, WildernessCat <wilderness...@ gmail.comwrote:
              On Oct 15, 3:17 pm, Captain Paralytic <paul_laut...@y ahoo.comwrote:
              >
              >
              >
              >
              >
              On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
              >
              Hello there!
              >
              Suppose I have an associative array that looks like this:
              $arr['alpha_1'] = 'some value';
              $arr['alpha_3'] = 'some value';
              $arr['alpha_4'] = 'some value';
              $arr['beta_2'] = 'some value';
              $arr['beta_4'] = 'some value';
              $arr['beta_6'] = 'some value';
              $arr['gamma_1'] = 'some value';
              $arr['gamma_5'] = 'some value';
              $arr['gamma_6'] = 'some value';
              $arr['gamma_7'] = 'some value';
              >
              Let's assume that the array is reasonably large (hundreds of entries).
              >
              Is there an efficient way of getting all the items whose key starts
              with 'beta'? (without doing a foreach/strncmp loop?)
              >
              Thanks in advance,
              Danny
              >
              Something like:
              >
              preg_grep('/^beta/',array_keys($a rr));
              >
              should give you all the keys that start with 'beta'
              >
              Yes, it sure looks more compact in the code, but the question is
              whether it's more efficient? I have a gut feeling that there is no
              efficient way.
              >
              By the way I forgot to mention that the array is not sorted.- Hide quoted text -
              >
              - Show quoted text -
              The fact that it is not sorted shouldn't matter. As far as efficiency
              goes, it is all handled by a BIF as opposed to interpreted code, so it
              has the opportunity to be more efficient.

              Now, I don't know how you want to use the results but this leaves you
              with an array containing all the keys that you need for later use.

              Comment

              • WildernessCat

                #8
                Re: Retrieving array values by range of keys

                On Oct 15, 5:05 pm, Captain Paralytic <paul_laut...@y ahoo.comwrote:
                On 15 Oct, 14:43, WildernessCat <wilderness...@ gmail.comwrote:
                >
                >
                >
                On Oct 15, 3:17 pm, Captain Paralytic <paul_laut...@y ahoo.comwrote:
                >
                On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
                >
                Hello there!
                >
                Suppose I have an associative array that looks like this:
                $arr['alpha_1'] = 'some value';
                $arr['alpha_3'] = 'some value';
                $arr['alpha_4'] = 'some value';
                $arr['beta_2'] = 'some value';
                $arr['beta_4'] = 'some value';
                $arr['beta_6'] = 'some value';
                $arr['gamma_1'] = 'some value';
                $arr['gamma_5'] = 'some value';
                $arr['gamma_6'] = 'some value';
                $arr['gamma_7'] = 'some value';
                >
                Let's assume that the array is reasonably large (hundreds of entries).
                >
                Is there an efficient way of getting all the items whose key starts
                with 'beta'? (without doing a foreach/strncmp loop?)
                >
                Thanks in advance,
                Danny
                >
                Something like:
                >
                preg_grep('/^beta/',array_keys($a rr));
                >
                should give you all the keys that start with 'beta'
                >
                Yes, it sure looks more compact in the code, but the question is
                whether it's more efficient? I have a gut feeling that there is no
                efficient way.
                >
                By the way I forgot to mention that the array is not sorted.- Hide quoted text -
                >
                - Show quoted text -
                >
                The fact that it is not sorted shouldn't matter. As far as efficiency
                goes, it is all handled by a BIF as opposed to interpreted code, so it
                has the opportunity to be more efficient.
                >
                Now, I don't know how you want to use the results but this leaves you
                with an array containing all the keys that you need for later use.
                Thanks. I think I'll go with this one.

                Comment

                • WildernessCat

                  #9
                  Re: Retrieving array values by range of keys

                  On Oct 15, 5:05 pm, Captain Paralytic <paul_laut...@y ahoo.comwrote:
                  On 15 Oct, 14:43, WildernessCat <wilderness...@ gmail.comwrote:
                  >
                  >
                  >
                  On Oct 15, 3:17 pm, Captain Paralytic <paul_laut...@y ahoo.comwrote:
                  >
                  On 15 Oct, 14:09, WildernessCat <wilderness...@ gmail.comwrote:
                  >
                  Hello there!
                  >
                  Suppose I have an associative array that looks like this:
                  $arr['alpha_1'] = 'some value';
                  $arr['alpha_3'] = 'some value';
                  $arr['alpha_4'] = 'some value';
                  $arr['beta_2'] = 'some value';
                  $arr['beta_4'] = 'some value';
                  $arr['beta_6'] = 'some value';
                  $arr['gamma_1'] = 'some value';
                  $arr['gamma_5'] = 'some value';
                  $arr['gamma_6'] = 'some value';
                  $arr['gamma_7'] = 'some value';
                  >
                  Let's assume that the array is reasonably large (hundreds of entries).
                  >
                  Is there an efficient way of getting all the items whose key starts
                  with 'beta'? (without doing a foreach/strncmp loop?)
                  >
                  Thanks in advance,
                  Danny
                  >
                  Something like:
                  >
                  preg_grep('/^beta/',array_keys($a rr));
                  >
                  should give you all the keys that start with 'beta'
                  >
                  Yes, it sure looks more compact in the code, but the question is
                  whether it's more efficient? I have a gut feeling that there is no
                  efficient way.
                  >
                  By the way I forgot to mention that the array is not sorted.- Hide quoted text -
                  >
                  - Show quoted text -
                  >
                  The fact that it is not sorted shouldn't matter. As far as efficiency
                  goes, it is all handled by a BIF as opposed to interpreted code, so it
                  has the opportunity to be more efficient.
                  >
                  Now, I don't know how you want to use the results but this leaves you
                  with an array containing all the keys that you need for later use.
                  Thanks! I think I'll go with this option.

                  Comment

                  Working...