Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.php > #6101 > unrolled thread

array filtering question

Started bybill <nobody@spamcop.net>
First post2012-05-21 10:22 -0400
Last post2012-05-21 15:19 -0400
Articles 9 — 4 participants

Back to article view | Back to comp.lang.php


Contents

  array filtering question bill <nobody@spamcop.net> - 2012-05-21 10:22 -0400
    Re: array filtering question Jerry Stuckle <jstucklex@attglobal.net> - 2012-05-21 10:46 -0400
      Re: array filtering question bill <nobody@spamcop.net> - 2012-05-21 11:18 -0400
        Re: array filtering question Jerry Stuckle <jstucklex@attglobal.net> - 2012-05-21 12:42 -0400
          Re: array filtering question bill <nobody@spamcop.net> - 2012-05-21 15:13 -0400
    Re: array filtering question Shake <QUITAESTO@QUITAESTO.NOES> - 2012-05-21 17:01 +0200
      Re: array filtering question bill <nobody@spamcop.net> - 2012-05-21 11:20 -0400
      Re: array filtering question Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2012-05-21 19:26 +0200
        Re: array filtering question bill <nobody@spamcop.net> - 2012-05-21 15:19 -0400

#6101 — array filtering question

Frombill <nobody@spamcop.net>
Date2012-05-21 10:22 -0400
Subjectarray filtering question
Message-ID<GuWdnQ9JU-sg0ifSnZ2dnUVZ_omdnZ2d@cablespeedmi.com>
I have a POST array with about 200 elements.
There MAY be one or more key elements that start with deleteF~
(for example deleteF~EAP, deleteF~Lowfee)

What I want to know is if any array element begins with deleteF~

I looked at array_keys, array_filter and others, but they seem to 
all match the whole key string.

I can process the whole array myself, but I am hoping that with 
all the array functions there might be one.

It would be nice if I could apply an array function and get back 
an array with just those keys. (they are checkboxes so the value 
is always "on", just their presence is enough information.)

bill

[toc] | [next] | [standalone]


#6103

FromJerry Stuckle <jstucklex@attglobal.net>
Date2012-05-21 10:46 -0400
Message-ID<jpdkh1$a9b$1@dont-email.me>
In reply to#6101
On 5/21/2012 10:22 AM, bill wrote:
> I have a POST array with about 200 elements.
> There MAY be one or more key elements that start with deleteF~
> (for example deleteF~EAP, deleteF~Lowfee)
>
> What I want to know is if any array element begins with deleteF~
>
> I looked at array_keys, array_filter and others, but they seem to all
> match the whole key string.
>
> I can process the whole array myself, but I am hoping that with all the
> array functions there might be one.
>
> It would be nice if I could apply an array function and get back an
> array with just those keys. (they are checkboxes so the value is always
> "on", just their presence is enough information.)
>
> bill

There isn't a real easy way to do this other than going through the 
whole array.

However, I think your design could be improved.  Why have multiple 
checkboxes with different names and the same value?  Why not have all 
the checkboxes with the same name and different values?

It would make processing much easier.

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#6105

Frombill <nobody@spamcop.net>
Date2012-05-21 11:18 -0400
Message-ID<R_2dnT7fEJ8wwSfSnZ2dnUVZ_qidnZ2d@cablespeedmi.com>
In reply to#6103
On 5/21/2012 10:46 AM, Jerry Stuckle wrote:
> On 5/21/2012 10:22 AM, bill wrote:
>> I have a POST array with about 200 elements.
>> There MAY be one or more key elements that start with deleteF~
>> (for example deleteF~EAP, deleteF~Lowfee)
>>
>> What I want to know is if any array element begins with deleteF~
>>
>> I looked at array_keys, array_filter and others, but they seem
>> to all
>> match the whole key string.
>>
>> I can process the whole array myself, but I am hoping that with
>> all the
>> array functions there might be one.
>>
>> It would be nice if I could apply an array function and get
>> back an
>> array with just those keys. (they are checkboxes so the value
>> is always
>> "on", just their presence is enough information.)
>>
>> bill
>
> There isn't a real easy way to do this other than going through
> the whole array.
>
> However, I think your design could be improved. Why have multiple
> checkboxes with different names and the same value? Why not have
> all the checkboxes with the same name and different values?
>
> It would make processing much easier.
>

Thanks Jerry,

There are major deletes (the ones I mentioned) and minor deletes 
AND about another 200 fields with values.  This is how it 
appeared in the feeble thing I use for a brain.

It only took me 4 lines to create the array with the keys I need 
in it.  The key encodes the item to delete: apply substr to it 
and I have the items to delete and the class of item they 
represent (which leads to the file name...)

I suppose I could do it the way you suggested, but then I'd need 
to get my mind wrapped around that design and this part of the 
project is 90% complete (which of course means it is 90% incomplete).

Thanks for the reasurance.

bill

[toc] | [prev] | [next] | [standalone]


#6107

FromJerry Stuckle <jstucklex@attglobal.net>
Date2012-05-21 12:42 -0400
Message-ID<jpdraj$ofl$1@dont-email.me>
In reply to#6105
On 5/21/2012 11:18 AM, bill wrote:
> On 5/21/2012 10:46 AM, Jerry Stuckle wrote:
>> On 5/21/2012 10:22 AM, bill wrote:
>>> I have a POST array with about 200 elements.
>>> There MAY be one or more key elements that start with deleteF~
>>> (for example deleteF~EAP, deleteF~Lowfee)
>>>
>>> What I want to know is if any array element begins with deleteF~
>>>
>>> I looked at array_keys, array_filter and others, but they seem
>>> to all
>>> match the whole key string.
>>>
>>> I can process the whole array myself, but I am hoping that with
>>> all the
>>> array functions there might be one.
>>>
>>> It would be nice if I could apply an array function and get
>>> back an
>>> array with just those keys. (they are checkboxes so the value
>>> is always
>>> "on", just their presence is enough information.)
>>>
>>> bill
>>
>> There isn't a real easy way to do this other than going through
>> the whole array.
>>
>> However, I think your design could be improved. Why have multiple
>> checkboxes with different names and the same value? Why not have
>> all the checkboxes with the same name and different values?
>>
>> It would make processing much easier.
>>
>
> Thanks Jerry,
>
> There are major deletes (the ones I mentioned) and minor deletes AND
> about another 200 fields with values. This is how it appeared in the
> feeble thing I use for a brain.
>
> It only took me 4 lines to create the array with the keys I need in it.
> The key encodes the item to delete: apply substr to it and I have the
> items to delete and the class of item they represent (which leads to the
> file name...)
>
> I suppose I could do it the way you suggested, but then I'd need to get
> my mind wrapped around that design and this part of the project is 90%
> complete (which of course means it is 90% incomplete).
>
> Thanks for the reasurance.
>
> bill
>

Actually, it shouldn't take any more to create the items with one key 
and different ids.  For instance, instead of creating something like:

   <input type="checkbox" name="deleteField1" value="on">

You create

   <input type="checkbox" name="delete[]" value="Field1">

You can call your major and minor delete checkboxes different names.

In this case, all the checkboxes with the name "delete[]" will be in 
$_POST['delete'] array, i.e.

$_POST['delete'][0] might equal 'Field1',
$_POST['delete'][1] might equal 'Field3' (Field 2 NOT being checked)
and so on.

I find related checkboxes (i.e. similar processing for all) to be much 
easier to handle this way.

-- 
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================

[toc] | [prev] | [next] | [standalone]


#6110

Frombill <nobody@spamcop.net>
Date2012-05-21 15:13 -0400
Message-ID<v8OdnframYdXDifSnZ2dnUVZ_uGdnZ2d@cablespeedmi.com>
In reply to#6107
On 5/21/2012 12:42 PM, Jerry Stuckle wrote:
> On 5/21/2012 11:18 AM, bill wrote:
>> On 5/21/2012 10:46 AM, Jerry Stuckle wrote:
>>> On 5/21/2012 10:22 AM, bill wrote:
>>>> I have a POST array with about 200 elements.
>>>> There MAY be one or more key elements that start with deleteF~
>>>> (for example deleteF~EAP, deleteF~Lowfee)
>>>>
>>>> What I want to know is if any array element begins with deleteF~
>>>>
>>>> I looked at array_keys, array_filter and others, but they seem
>>>> to all
>>>> match the whole key string.
>>>>
>>>> I can process the whole array myself, but I am hoping that with
>>>> all the
>>>> array functions there might be one.
>>>>
>>>> It would be nice if I could apply an array function and get
>>>> back an
>>>> array with just those keys. (they are checkboxes so the value
>>>> is always
>>>> "on", just their presence is enough information.)
>>>>
>>>> bill
>>>
>>> There isn't a real easy way to do this other than going through
>>> the whole array.
>>>
>>> However, I think your design could be improved. Why have multiple
>>> checkboxes with different names and the same value? Why not have
>>> all the checkboxes with the same name and different values?
>>>
>>> It would make processing much easier.
>>>
>>
>> Thanks Jerry,
>>
>> There are major deletes (the ones I mentioned) and minor
>> deletes AND
>> about another 200 fields with values. This is how it appeared
>> in the
>> feeble thing I use for a brain.
>>
>> It only took me 4 lines to create the array with the keys I
>> need in it.
>> The key encodes the item to delete: apply substr to it and I
>> have the
>> items to delete and the class of item they represent (which
>> leads to the
>> file name...)
>>
>> I suppose I could do it the way you suggested, but then I'd
>> need to get
>> my mind wrapped around that design and this part of the project
>> is 90%
>> complete (which of course means it is 90% incomplete).
>>
>> Thanks for the reasurance.
>>
>> bill
>>
>
> Actually, it shouldn't take any more to create the items with one
> key and different ids. For instance, instead of creating
> something like:
>
> <input type="checkbox" name="deleteField1" value="on">
>
> You create
>
> <input type="checkbox" name="delete[]" value="Field1">
>
> You can call your major and minor delete checkboxes different names.
>
> In this case, all the checkboxes with the name "delete[]" will be
> in $_POST['delete'] array, i.e.
>
> $_POST['delete'][0] might equal 'Field1',
> $_POST['delete'][1] might equal 'Field3' (Field 2 NOT being checked)
> and so on.
>
> I find related checkboxes (i.e. similar processing for all) to be
> much easier to handle this way.
>

Yes, that would have been. I didn't think about an array of 
checkboxes.  If it doesn't fall out of my brain I will do it that 
way next time.  Many thanks.

bill

[toc] | [prev] | [next] | [standalone]


#6104

FromShake <QUITAESTO@QUITAESTO.NOES>
Date2012-05-21 17:01 +0200
Message-ID<jpdld1$g5p$1@dont-email.me>
In reply to#6101
El 21/05/2012 16:22, bill escribió:
> I have a POST array with about 200 elements.
> There MAY be one or more key elements that start with deleteF~
> (for example deleteF~EAP, deleteF~Lowfee)
>
> What I want to know is if any array element begins with deleteF~

Perhaps you can use multidimensional array here.

If you have something like:

<input type="checkbox" name="item_1" value="x" />
<input type="checkbox" name="[deleteF~][item_2]" value="x" />
<input type="checkbox" name="item_3" value="x" />
<input type="checkbox" name="[deleteF~][item_4]" value="x" />

Perhaps if better to change to:

Then the POST will be:

$_POST['item_1] = 'X';
$_POST['item_3] = 'X';
$_POST['deleteF~']['item_2] = 'X';
$_POST['deleteF~']['item_4] = 'X';

And you can do:

if(isset($_POST['deleteF~'])) foreach($_POST['deleteF~'] as $Item) {

// Do things with this item.
}

greetings

[toc] | [prev] | [next] | [standalone]


#6106

Frombill <nobody@spamcop.net>
Date2012-05-21 11:20 -0400
Message-ID<R_2dnTnfEJ-zwCfSnZ2dnUVZ_qidnZ2d@cablespeedmi.com>
In reply to#6104
On 5/21/2012 11:01 AM, Shake wrote:
> El 21/05/2012 16:22, bill escribió:
>> I have a POST array with about 200 elements.
>> There MAY be one or more key elements that start with deleteF~
>> (for example deleteF~EAP, deleteF~Lowfee)
>>
>> What I want to know is if any array element begins with deleteF~
>
> Perhaps you can use multidimensional array here.
>
> If you have something like:
>
> <input type="checkbox" name="item_1" value="x" />
> <input type="checkbox" name="[deleteF~][item_2]" value="x" />
> <input type="checkbox" name="item_3" value="x" />
> <input type="checkbox" name="[deleteF~][item_4]" value="x" />
>
> Perhaps if better to change to:
>
> Then the POST will be:
>
> $_POST['item_1] = 'X';
> $_POST['item_3] = 'X';
> $_POST['deleteF~']['item_2] = 'X';
> $_POST['deleteF~']['item_4] = 'X';
>
> And you can do:
>
> if(isset($_POST['deleteF~'])) foreach($_POST['deleteF~'] as $Item) {
>
> // Do things with this item.
> }
>
> greetings

Nice idea.

bill

[toc] | [prev] | [next] | [standalone]


#6108

FromThomas 'PointedEars' Lahn <PointedEars@web.de>
Date2012-05-21 19:26 +0200
Message-ID<1718282.RzYSdqBbuY@PointedEars.de>
In reply to#6104
Shake wrote:

> El 21/05/2012 16:22, bill escribió:
>> I have a POST array with about 200 elements.
>> There MAY be one or more key elements that start with deleteF~
>> (for example deleteF~EAP, deleteF~Lowfee)
>>
>> What I want to know is if any array element begins with deleteF~
> 
> Perhaps you can use multidimensional array here.
> 
> If you have something like:
> 
> <input type="checkbox" name="item_1" value="x" />
> <input type="checkbox" name="[deleteF~][item_2]" value="x" />
> <input type="checkbox" name="item_3" value="x" />
> <input type="checkbox" name="[deleteF~][item_4]" value="x" />
> 
> Perhaps if better to change to:
> 
> Then the POST will be:
> 
> $_POST['item_1] = 'X';
> $_POST['item_3] = 'X';
> $_POST['deleteF~']['item_2] = 'X';
> $_POST['deleteF~']['item_4] = 'X';
> 
> And you can do:
> 
> if(isset($_POST['deleteF~'])) foreach($_POST['deleteF~'] as $Item) {
> 
> // Do things with this item.
> }

However, if for some reason the markup cannot be changed, the solution still 
is rather simple:

  $matching_keys = array_filter(array_keys($_POST),
    function ($key) {
      return preg_match('/^deleteF~/', $key);
    });

  if ($matching_keys)
  {
    /* … */
  }

<http://php.net/array_keys>
<http://php.net/preg_match>
<http://php.net/array_filter>


PointedEars
-- 
var bugRiddenCrashPronePieceOfJunk = (
    navigator.userAgent.indexOf('MSIE 5') != -1
    && navigator.userAgent.indexOf('Mac') != -1
)  // Plone, register_function.js:16

[toc] | [prev] | [next] | [standalone]


#6112

Frombill <nobody@spamcop.net>
Date2012-05-21 15:19 -0400
Message-ID<18OdnWY3FbuwCCfSnZ2dnUVZ_gudnZ2d@cablespeedmi.com>
In reply to#6108
On 5/21/2012 1:26 PM, Thomas 'PointedEars' Lahn wrote:
> Shake wrote:
>
>> El 21/05/2012 16:22, bill escribió:
>>> I have a POST array with about 200 elements.
>>> There MAY be one or more key elements that start with deleteF~
>>> (for example deleteF~EAP, deleteF~Lowfee)
>>>
>>> What I want to know is if any array element begins with deleteF~
>>
>> Perhaps you can use multidimensional array here.
>>
>> If you have something like:
>>
>> <input type="checkbox" name="item_1" value="x" />
>> <input type="checkbox" name="[deleteF~][item_2]" value="x" />
>> <input type="checkbox" name="item_3" value="x" />
>> <input type="checkbox" name="[deleteF~][item_4]" value="x" />
>>
>> Perhaps if better to change to:
>>
>> Then the POST will be:
>>
>> $_POST['item_1] = 'X';
>> $_POST['item_3] = 'X';
>> $_POST['deleteF~']['item_2] = 'X';
>> $_POST['deleteF~']['item_4] = 'X';
>>
>> And you can do:
>>
>> if(isset($_POST['deleteF~'])) foreach($_POST['deleteF~'] as $Item) {
>>
>> // Do things with this item.
>> }
>
> However, if for some reason the markup cannot be changed, the solution still
> is rather simple:
>
>    $matching_keys = array_filter(array_keys($_POST),
>      function ($key) {
>        return preg_match('/^deleteF~/', $key);
>      });
>
>    if ($matching_keys)
>    {
>      /* … */
>    }
>
> <http://php.net/array_keys>
> <http://php.net/preg_match>
> <http://php.net/array_filter>
>
>
> PointedEars

Thanks for the education.

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.php


csiph-web