FUDforum
Fast Uncompromising Discussions. FUDforum will get your users talking.

Home » Imported messages » comp.lang.php » Count how many times a value occurs in an array
Show: Today's Messages :: Polls :: Message Navigator
Switch to threaded view of this topic Create a new topic Submit Reply
Count how many times a value occurs in an array [message #179263] Thu, 27 September 2012 06:25 Go to next message
Ryan is currently offline  Ryan
Messages: 15
Registered: July 2012
Karma: 0
Junior Member
I have an array lets say for example:

$my_array = array('1', '1', '2', '3', '1', '3', '2');

I want a listing of each value in the array and how many times it occurs for in this case it would look like this

array ('1' => 3, '2' => 2, '3' => 2)

jw if ph has a build in function to make this easy of am I going to have to roll my own by looping though the array?
Re: Count how many times a value occurs in an array [message #179264 is a reply to message #179263] Thu, 27 September 2012 07:10 Go to previous messageGo to next message
aroniss is currently offline  aroniss
Messages: 1
Registered: September 2012
Karma: 0
Junior Member
On Thursday, September 27, 2012 8:25:21 AM UTC+2, Ryan wrote:
> I have an array lets say for example:
>
>
>
> $my_array = array('1', '1', '2', '3', '1', '3', '2');
>
>
>
> I want a listing of each value in the array and how many times it occurs for in this case it would look like this
>
>
>
> array ('1' => 3, '2' => 2, '3' => 2)
>
>
>
> jw if ph has a build in function to make this easy of am I going to have to roll my own by looping though the array?

Use built-in function: array_count_values($my_array)
Re: Count how many times a value occurs in an array [message #179265 is a reply to message #179263] Thu, 27 September 2012 10:48 Go to previous messageGo to next message
Captain Paralytic is currently offline  Captain Paralytic
Messages: 204
Registered: September 2010
Karma: 0
Senior Member
On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>
> jw if ph has a build in function to make this easy of am I going to have to roll my own by looping though the array?

Care to explain what the above is supposed to mean?
Re: Count how many times a value occurs in an array [message #179266 is a reply to message #179265] Thu, 27 September 2012 11:08 Go to previous messageGo to next message
Erwin Moller is currently offline  Erwin Moller
Messages: 228
Registered: September 2010
Karma: 0
Senior Member
On 9/27/2012 12:48 PM, Captain Paralytic wrote:
> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>>
>> jw if ph has a build in function to make this easy of am I going to have to roll my own by looping though the array?
>
> Care to explain what the above is supposed to mean?
>

jw probably means: Just wondering
ph probably means PHP

The remainder is reasonably clear (I think).

Regards,
Erwin Moller

--
"That which can be asserted without evidence, can be dismissed without
evidence."
-- Christopher Hitchens
Re: Count how many times a value occurs in an array [message #179268 is a reply to message #179266] Thu, 27 September 2012 16:19 Go to previous messageGo to next message
M. Strobel is currently offline  M. Strobel
Messages: 386
Registered: December 2011
Karma: 0
Senior Member
Am 27.09.2012 13:08, schrieb Erwin Moller:
> On 9/27/2012 12:48 PM, Captain Paralytic wrote:
>> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>>>
>>> jw if ph has a build in function to make this easy of am I going to have to roll
>>> my own by looping though the array?
>>
>> Care to explain what the above is supposed to mean?
>>
>
> jw probably means: Just wondering
> ph probably means PHP
>

I hope (for him) the OP does not program the same way he is writing.

/Str.
Re: Count how many times a value occurs in an array [message #179269 is a reply to message #179268] Thu, 27 September 2012 17:04 Go to previous messageGo to next message
Ryan is currently offline  Ryan
Messages: 15
Registered: July 2012
Karma: 0
Junior Member
On Thursday, September 27, 2012 9:19:08 AM UTC-7, M. Strobel wrote:
> Am 27.09.2012 13:08, schrieb Erwin Moller:
>
>> On 9/27/2012 12:48 PM, Captain Paralytic wrote:
>
>>> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>
>>>>
>
>>>> jw if ph has a build in function to make this easy of am I going to have to roll
>
>>>> my own by looping though the array?
>
>>>
>
>>> Care to explain what the above is supposed to mean?
>
>>>
>
>>
>
>> jw probably means: Just wondering
>
>> ph probably means PHP
>
>>
>
>
>
> I hope (for him) the OP does not program the same way he is writing.
>
>
>
> /Str.

no will rray_count_values() not work lol. It was late when I wote it. :/
Re: Count how many times a value occurs in an array [message #179270 is a reply to message #179268] Thu, 27 September 2012 17:14 Go to previous messageGo to next message
Ryan is currently offline  Ryan
Messages: 15
Registered: July 2012
Karma: 0
Junior Member
On Thursday, September 27, 2012 9:19:08 AM UTC-7, M. Strobel wrote:
> Am 27.09.2012 13:08, schrieb Erwin Moller:
>
>> On 9/27/2012 12:48 PM, Captain Paralytic wrote:
>
>>> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>
>>>>
>
>>>> jw if ph has a build in function to make this easy of am I going to have to roll
>
>>>> my own by looping though the array?
>
>>>
>
>>> Care to explain what the above is supposed to mean?
>
>>>
>
>>
>
>> jw probably means: Just wondering
>
>> ph probably means PHP
>
>>
>
>
>
> I hope (for him) the OP does not program the same way he is writing.
>
>
>
> /Str.

Oh so will arra_count_values not work? lol that's what I get for typing tired. Fortunately for me my IDE will highlight any errors lol.

On a more serious note though I have noticed one limitation. It will no go into sub arrays. So when I query my DB it will actually come up like this

array (array(1), array(1), array (2)) ect. So what would be the best way to deal with this, is there a way to go though and clean it up by removing the nested arrays and replacing them with integers or even a literal string would work for me.

I suppose if all else fails I could just loop though the primary array and implode each sub array.
Re: Count how many times a value occurs in an array [message #179272 is a reply to message #179270] Thu, 27 September 2012 17:43 Go to previous messageGo to next message
M. Strobel is currently offline  M. Strobel
Messages: 386
Registered: December 2011
Karma: 0
Senior Member
Am 27.09.2012 19:14, schrieb Ryan:
> On Thursday, September 27, 2012 9:19:08 AM UTC-7, M. Strobel wrote:
>> Am 27.09.2012 13:08, schrieb Erwin Moller:
>>
>>> On 9/27/2012 12:48 PM, Captain Paralytic wrote:
>>
>>>> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>>
>>>> >
>>
>>>> > jw if ph has a build in function to make this easy of am I going to have to roll
>>
>>>> > my own by looping though the array?
>>
>>>>
>>
>>>> Care to explain what the above is supposed to mean?
>>
>>>>
>>
>>>
>>
>>> jw probably means: Just wondering
>>
>>> ph probably means PHP
>>
>>>
>>
>>
>>
>> I hope (for him) the OP does not program the same way he is writing.
>>
>>
>>
>> /Str.
>
> Oh so will arra_count_values not work? lol that's what I get for typing tired. Fortunately for me my IDE will highlight any errors lol.
>
> On a more serious note though I have noticed one limitation. It will no go into sub arrays. So when I query my DB it will actually come up like this
>
> array (array(1), array(1), array (2)) ect. So what would be the best way to deal with this, is there a way to go though and clean it up by removing the nested arrays and replacing them with integers or even a literal string would work for me.
>
> I suppose if all else fails I could just loop though the primary array and implode each sub array.

Yes you get an array of arrays from a database query.

PHP has a ton of functions... let's see... I would use array_walk_recursive().

Be careful with call-by-reference, it is not allowed in the newest PHP versions.

/Str.
Re: Count how many times a value occurs in an array [message #179273 is a reply to message #179272] Thu, 27 September 2012 18:07 Go to previous messageGo to next message
Christoph Becker is currently offline  Christoph Becker
Messages: 91
Registered: June 2012
Karma: 0
Member
M. Strobel wrote:
> Be careful with call-by-reference, it is not allowed in the newest PHP versions.

Only the call-time call-by-reference was deprecated in 5.3 and removed
in 5.4. Declaring a parameter of a function as reference is absolutely
fine.

E.g.:

function increase(&$n)
{
$n++;
}

$i = 1; increase($i); // $i == 2
$i = 1; increase(&$i); // fatal error in PHP 5.4

--
Christoph M. Becker
Re: Count how many times a value occurs in an array [message #179274 is a reply to message #179273] Thu, 27 September 2012 21:52 Go to previous messageGo to next message
M. Strobel is currently offline  M. Strobel
Messages: 386
Registered: December 2011
Karma: 0
Senior Member
Am 27.09.2012 20:07, schrieb Christoph Becker:
> M. Strobel wrote:
>> Be careful with call-by-reference, it is not allowed in the newest PHP versions.
>
> Only the call-time call-by-reference was deprecated in 5.3 and removed
> in 5.4. Declaring a parameter of a function as reference is absolutely
> fine.
>
> E.g.:
>
> function increase(&$n)
> {
> $n++;
> }
>
> $i = 1; increase($i); // $i == 2
> $i = 1; increase(&$i); // fatal error in PHP 5.4
>

Yes, but I had a problem with callback functions: if you created them with
create_function this was a call-time call-by-reference.


/Str.
Re: Count how many times a value occurs in an array [message #179275 is a reply to message #179274] Thu, 27 September 2012 22:07 Go to previous messageGo to next message
Christoph Becker is currently offline  Christoph Becker
Messages: 91
Registered: June 2012
Karma: 0
Member
M. Strobel wrote:
> Yes, but I had a problem with callback functions: if you created them with
> create_function this was a call-time call-by-reference.

Could you please give an example. For example

array_walk($array, create_function('&$x', '$x = trim($x);'));

works fine.

--
Christoph M. Becker
Re: Count how many times a value occurs in an array [message #179276 is a reply to message #179270] Thu, 27 September 2012 22:26 Go to previous messageGo to next message
Jerry Stuckle is currently offline  Jerry Stuckle
Messages: 2598
Registered: September 2010
Karma: 0
Senior Member
On 9/27/2012 1:14 PM, Ryan wrote:
> On Thursday, September 27, 2012 9:19:08 AM UTC-7, M. Strobel wrote:
>> Am 27.09.2012 13:08, schrieb Erwin Moller:
>>
>>> On 9/27/2012 12:48 PM, Captain Paralytic wrote:
>>
>>>> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>>
>>>> >
>>
>>>> > jw if ph has a build in function to make this easy of am I going to have to roll
>>
>>>> > my own by looping though the array?
>>
>>>>
>>
>>>> Care to explain what the above is supposed to mean?
>>
>>>>
>>
>>>
>>
>>> jw probably means: Just wondering
>>
>>> ph probably means PHP
>>
>>>
>>
>>
>>
>> I hope (for him) the OP does not program the same way he is writing.
>>
>>
>>
>> /Str.
>
> Oh so will arra_count_values not work? lol that's what I get for typing tired. Fortunately for me my IDE will highlight any errors lol.
>
> On a more serious note though I have noticed one limitation. It will no go into sub arrays. So when I query my DB it will actually come up like this
>
> array (array(1), array(1), array (2)) ect. So what would be the best way to deal with this, is there a way to go though and clean it up by removing the nested arrays and replacing them with integers or even a literal string would work for me.
>
> I suppose if all else fails I could just loop though the primary array and implode each sub array.
>

If it's coming from a database, just let the database gives you the counts.

--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex(at)attglobal(dot)net
==================
array_walk() callback Was: Count how many times a value occurs in an array [message #179277 is a reply to message #179275] Fri, 28 September 2012 08:04 Go to previous messageGo to next message
M. Strobel is currently offline  M. Strobel
Messages: 386
Registered: December 2011
Karma: 0
Senior Member
Am 28.09.2012 00:07, schrieb Christoph Becker:
> M. Strobel wrote:
>> Yes, but I had a problem with callback functions: if you created them with
>> create_function this was a call-time call-by-reference.
>
> Could you please give an example. For example
>
> array_walk($array, create_function('&$x', '$x = trim($x);'));
>
> works fine.

My requirement was not to change the array, but to return data from inside the callback.

In older PHP you could ignore the warning about Call-time pass-by-reference and give
the callback function a third parameter by ref.

Now there is only one way to do it, see the command line test code below.

/Str.

<?php
/**
* Testen von array_walk mit Closure und use-Parameter by reference
*/

error_reporting(-1);

$sub1 = array('I'=>'Igor', 'J'=>'Jan', 'K'=>'Karl', 'L'=>'Liugi', 'M'=>'Michael');
$sub2 = array('A'=>'Alexa', 'B'=>'Brunhilda','C'=>'Carla','D'=>'Dina','E'=>'Elsa');
$a['F'] = 'Frantzi';
$a['G'] = 'Gustavo';
$a['Gentlemen'] = $sub1;
$a['H'] = 'Hillbilly';
$a['Ladies'] = $sub2;

echo "Number of elements using count(): ", count($a), PHP_EOL;

echo (array_key_exists('K', $a)) ? 'array_key_exists() does work in
sub-arrays':'array_key_exists() does NOT work in sub-arrays', PHP_EOL;


echo '------------------------------', PHP_EOL;
echo "\tStart run\n";
echo '------------------------------', PHP_EOL;

/**
* try a call by ref in a closure use list
*
* This is the best solution to return values from the callback.
*/
$f0 = function ($v,$k,$l) use(&$var) {
if ($k==$l) $var = $v;
};

$var = 'something';
echo "var before array_walk: ($var)\n";
# this does work, var will be defined: unset($var);
$rc = array_walk_recursive($a, $f0, 'M');

echo "rc = $rc, var after array_walk f0 with call by ref in use list: ($var)\n";
echo '------------------------------', PHP_EOL;

/**
* testing f0 in a different scope
*/
function func0($arr,$callback) {
$var = 'Testing in a local scope with f0';
echo "var before array_walk: ($var)\n";
$rc = array_walk_recursive($arr, $callback, 'M');
return ($rc) ? 'Call successful, var is '.$var : 'Call NOT successful, var is
'.$var ;
}

echo func0($a,$f0), PHP_EOL;
echo "Variable in global scope after call: $var\n";
echo "Result: the var by ref in the use list binds to the global scope where it was
defined.\n";

/**
* trying to put a call by ref into the parameter list
*/

$f1 = function ($v,$k,$l, &$var) {
if ($k==$l) $var = $v;
};

$var = 'Test Closure f1';
echo "var before array_walk: ($var)\n";
# this does work, var will be defined: unset($var);
$rc = array_walk_recursive($a, $f1, 'L', $var);

echo "rc = $rc, var after array_walk f1 with call by ref in parameter list: ($var)\n";
echo "We can only pass 1 extra parameter into the callback, f1 does not work\n";
echo '------------------------------', PHP_EOL;

/**
* the idea is to test if we have call by ref in a closure parameter
*/
$f2 = function ($v,$k, &$var) {
if ($k=='I') $var = $v;
};

$var = 'Test Closure f2';
echo "var before array_walk: ($var)\n";
$rc = array_walk_recursive($a, $f2, $var);

echo "rc = $rc, var after array_walk f2 with call by ref in parameter list: ($var)\n";
#echo "We can only pass 1 extra parameter into the callback, f1 does not work\n";
echo '------------------------------', PHP_EOL;

echo <<<EOD
Result for Closure as callback in array_walk:

We can pass variables by ref in the use() parameter list, and only there.
This is the way to return results.

The callback invocation supports one more variable or value, after value and key.

EOD
;
Re: Count how many times a value occurs in an array [message #179278 is a reply to message #179266] Fri, 28 September 2012 14:35 Go to previous messageGo to next message
Captain Paralytic is currently offline  Captain Paralytic
Messages: 204
Registered: September 2010
Karma: 0
Senior Member
On Sep 27, 12:08 pm, Erwin Moller <erwinmolleruse...@xs4all.nl> wrote:
> On 9/27/2012 12:48 PM, Captain Paralytic wrote:
>
>> On Sep 27, 7:25 am, Ryan <rbile...@gmail.com> wrote:
>
>>> jw if ph has a build in function to make this easy of am I going to have to roll my own by looping though the array?
>
>> Care to explain what the above is supposed to mean?
>
> jw probably means: Just wondering
> ph probably means PHP
>
> The remainder is reasonably clear (I think).
Those first 2 weren't what I was having particular trouble with. The
rest of it is total nonsense!
Re: Count how many times a value occurs in an array [message #179279 is a reply to message #179278] Fri, 28 September 2012 15:40 Go to previous message
Christoph Becker is currently offline  Christoph Becker
Messages: 91
Registered: June 2012
Karma: 0
Member
Captain Paralytic wrote:
> Those first 2 weren't what I was having particular trouble with. The
> rest of it is total nonsense!

I suppose, what was meant is:

Just wondering, if PHP has a built in function to make this easy, or do
I have to roll my own (by looping through the array)?

--
Christoph M. Becker
  Switch to threaded view of this topic Create a new topic Submit Reply
Previous Topic: Only Allow exec in CLI
Next Topic: Re: FEDEX Shipping
Goto Forum:
  

-=] Back to Top [=-
[ Syndicate this forum (XML) ] [ RSS ]

Current Time: Sat Nov 30 19:18:16 GMT 2024

Total time taken to generate the page: 0.02991 seconds