PDA

View Full Version : what is it called when one record stores many values like "2,3,4,5,10" ?


bradsears
10-06-2003, 02:03 PM
hi

Vbulletin stores a user's 2ndary usergroup in a comma delimited list in one record of the user recordset
- example = "1,6,2,4,5,22"
- all I need to do (via my external script) is be able to:
- check if a certain number is in there
- add a number if it is not
- remove a number if I need to (user leaves the group)

I'm a struggling asp->php convert and I don't want to have to re-invent the wheel on this one so I am wondering:
- is there a special name for a record that contains a comma delimited list like this
- are there special sql query terms that support this
- is processing of lists like this perhaps a built-in php function

Thanks

Dean C
10-06-2003, 03:44 PM
This nice little function will help you out :):

http://uk2.php.net/manual/en/function.in-array.php

- miSt

bradsears
10-06-2003, 03:54 PM
Mist, I appreciate the help. A friend of mine just sent me the text below as well so I think I am pointed in the right direction.

***********
Would you believe that I'd just coded something similar a few days ago?

There's a couple choices you could make. You can keep the data as a string and then do things like "strpos" to see if a number is in there, but that gets messy when you want to remove a number. Or you can turn the string in to an array, but then you have to translate it from a string to an array, and back again when you want to store it.

Here's a bit of code I had to do the array bit:

// $info is the comma string
function string2array($string) {
$temp = explode(",", $string);
$info = array();
foreach ($temp as $key) {
if ($key > 0)
$info[$key] = 1;
}
return $info;
}

And then you just need to look at $info[$X] to see if a particular number is set or not. To add/remove a number, just do $info[$X] = 1 or 0;

To get a lists of all the numbers (instead of just checking if they're
set) do

foreach ($info as $key => $value)
if ($value == 1) // needed if you're setting things to 0
echo "$key is one of the numbers set, yay.";

To turn it back in to a string,

function array2string($info) {
$string = "";
foreach ($info as $key => $value) {
$string .= "$key,";
}
return $string; // we have an extra "," at the end, might screw up vBulletin, so you could remove it with substr($string, -1) }
****************

Dean C
10-06-2003, 06:02 PM
I have never had the need to turn the string into an array when i'm selecting from the database. I just use in_array and it's sorted :). PHP isn't so strict with data types as other programming languages :)

bradsears
10-06-2003, 06:20 PM
I'll try your way. I'm all for keeping it simple.