## Count how many times a value occurs in an array

Showing 1-15 of 15 messages
 Count how many times a value occurs in an array Ryan 9/26/12 11:25 PM 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 Aroniss 9/27/12 12:10 AM Use built-in function: array_count_values(\$my_array) Re: Count how many times a value occurs in an array Captain Paralytic 9/27/12 3:48 AM On Sep 27, 7:25 am, Ryan 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 Erwin Moller 9/27/12 4:08 AM 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 M. Strobel 9/27/12 9:19 AM 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 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. unk...@googlegroups.com 9/27/12 10:04 AM unk...@googlegroups.com 9/27/12 10:14 AM Re: Count how many times a value occurs in an array M. Strobel 9/27/12 10:43 AM Am 27.09.2012 19:14, schrieb Ryan: > 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 Christoph Becker 9/27/12 11:07 AM 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 M. Strobel 9/27/12 2:52 PM 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 Christoph Becker 9/27/12 3:07 PM 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 Jerry Stuckle 9/27/12 3:26 PM 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 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. jstu...@attglobal.net ================== array_walk() callback Was: Count how many times a value occurs in an array M. Strobel 9/28/12 1:04 AM 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. '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 << wrote: > On 9/27/2012 12:48 PM, Captain Paralytic wrote: > > > On Sep 27, 7:25 am, Ryan 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 Christoph Becker 9/28/12 8:40 AM 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