Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

array filtering question

1 view
Skip to first unread message

bill

unread,
May 21, 2012, 10:22:51 AM5/21/12
to
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

Jerry Stuckle

unread,
May 21, 2012, 10:46:51 AM5/21/12
to
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.
jstu...@attglobal.net
==================

Shake

unread,
May 21, 2012, 11:01:52 AM5/21/12
to
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

bill

unread,
May 21, 2012, 11:18:03 AM5/21/12
to
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

bill

unread,
May 21, 2012, 11:20:12 AM5/21/12
to
Nice idea.

bill

Jerry Stuckle

unread,
May 21, 2012, 12:42:53 PM5/21/12
to
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.

Thomas 'PointedEars' Lahn

unread,
May 21, 2012, 1:26:11 PM5/21/12
to
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

bill

unread,
May 21, 2012, 3:13:12 PM5/21/12
to
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

bill

unread,
May 21, 2012, 3:19:07 PM5/21/12
to
Thanks for the education.
0 new messages