469,352 Members | 2,154 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,352 developers. It's quick & easy.

How to convert array to string, and vice versa

I have some items, numbered from 0 upwards. Some of them may have a
string attached. All these items need to be represented in a single
already existing database record. So, I thought of taking an array, as
it might be looking thus (the values are all strings):

Key Value
--- -----
0 firstone
2 somestring
5 anotherstr
and so on, and converting it to a single string:

"'0', 'firstone', '2', 'somestring', '5', 'anotherstr'"

then I have a string I can write to the database record.

So I want to go from:

$myarr = array (0 => 'firstone', 2 => 'somestring', 5 => 'anotherstr');

to:

$mystring = "'0', 'firstone', '2', 'somestring', '5', 'anotherstr'";

Is there a quick way to do this mapping in both directions? (I don't
mind if the string read/written to the database is not as above, as it
won't be used for any other purpose).

I can't see any array or string function that looks designed for this or
a similar purpose.

Thanks for any pointers.

-- tim
May 23 '06 #1
7 18495
Tim Streater wrote:
I have some items, numbered from 0 upwards. Some of them may have a
string attached. All these items need to be represented in a single
already existing database record. So, I thought of taking an array, as
it might be looking thus (the values are all strings):

Key Value
--- -----
0 firstone
2 somestring
5 anotherstr
and so on, and converting it to a single string:

"'0', 'firstone', '2', 'somestring', '5', 'anotherstr'"

then I have a string I can write to the database record.

So I want to go from:

$myarr = array (0 => 'firstone', 2 => 'somestring', 5 => 'anotherstr');

to:

$mystring = "'0', 'firstone', '2', 'somestring', '5', 'anotherstr'";

Is there a quick way to do this mapping in both directions? (I don't
mind if the string read/written to the database is not as above, as it
won't be used for any other purpose).

I can't see any array or string function that looks designed for this or
a similar purpose.

Thanks for any pointers.

-- tim


Something like this could be used to pack the string:

$foreach( $myarr as $key => $value ) {
$tmp[] = "'$key'";
$tmp[] = "'$value'";
}
$mystring = '"'.implode(', ', $tmp).'"';

Unpacking would be something like:
$tmp = substr($mystring, 1, strlen($mystring)-1);
$myarr = explode(', ', $tmp);

You may have to fudge it a bit to get the quotes all correct.

-david-

May 23 '06 #2
Tim Streater said the following on 23/05/2006 17:49:
I have some items, numbered from 0 upwards. Some of them may have a
string attached. All these items need to be represented in a single
already existing database record. So, I thought of taking an array, as
it might be looking thus (the values are all strings):

Key Value
--- -----
0 firstone
2 somestring
5 anotherstr
and so on, and converting it to a single string:

"'0', 'firstone', '2', 'somestring', '5', 'anotherstr'"

then I have a string I can write to the database record.


Is it absolutely mandatory that you put these into a single record?
This is almost certainly a bad idea. Not only do you have to write
conversion functions to get data into and out of the database, but you
data is no longer atomic. Amongst other things, this makes it difficult
to search, index, delete or reference your data...
--
Oli
May 23 '06 #3
In article <xv****************@newsfe3-win.ntli.net>,
Oli Filth <ca***@olifilth.co.uk> wrote:
Tim Streater said the following on 23/05/2006 17:49:
I have some items, numbered from 0 upwards. Some of them may have a
string attached. All these items need to be represented in a single
already existing database record. So, I thought of taking an array, as
it might be looking thus (the values are all strings):

Key Value
--- -----
0 firstone
2 somestring
5 anotherstr
and so on, and converting it to a single string:

"'0', 'firstone', '2', 'somestring', '5', 'anotherstr'"

then I have a string I can write to the database record.


Is it absolutely mandatory that you put these into a single record?
This is almost certainly a bad idea. Not only do you have to write
conversion functions to get data into and out of the database, but you
data is no longer atomic. Amongst other things, this makes it difficult
to search, index, delete or reference your data...


The one record in question is for an interface card, typically in a
router or an SDH box. Up to now the ports on the card have been
considered identical and are numbered incrementally, so I have just kept
a record for the card, with a field numports. Now we wish to keep
information about the port optics (short-reach, long-reach, etc). With
the advent of plug-in optics this may vary from port to port.

The most general/flexible/futureproof way to do this would evidently be
to have a set of port-records, pointing to the interface card. Then,
obviously, the optics information would just be a field in the port
record.

I have resisted doing it this way up to now, because:

1) this would be a major change to the way the data is held, and more
importantly, displayed on our web pages, and interacted with.

2) it would prolly slow down the functionality a lot as there would be
an extra layer of things to do per port.

3) It's seemed a bit heavy to do this for just one bit of information
per port

4) I haven't got time to do this much work on this item.

So, I am looking for a quick'n'dirty fix :-) which will cause minimal
disruption on the rest of the structure.

I agree with your prospective downsides.

-- tim
May 23 '06 #4
In article <lf******************@fe55.usenetserver.com>,
David Haynes <da***********@sympatico.ca> wrote:
Tim Streater wrote:
I have some items, numbered from 0 upwards. Some of them may have a
string attached. All these items need to be represented in a single
already existing database record. So, I thought of taking an array, as
it might be looking thus (the values are all strings):

Key Value
--- -----
0 firstone
2 somestring
5 anotherstr
and so on, and converting it to a single string:

"'0', 'firstone', '2', 'somestring', '5', 'anotherstr'"

then I have a string I can write to the database record.

So I want to go from:

$myarr = array (0 => 'firstone', 2 => 'somestring', 5 => 'anotherstr');

to:

$mystring = "'0', 'firstone', '2', 'somestring', '5', 'anotherstr'";

Is there a quick way to do this mapping in both directions? (I don't
mind if the string read/written to the database is not as above, as it
won't be used for any other purpose).

I can't see any array or string function that looks designed for this or
a similar purpose.

Thanks for any pointers.

-- tim


Something like this could be used to pack the string:

$foreach( $myarr as $key => $value ) {
$tmp[] = "'$key'";
$tmp[] = "'$value'";
}
$mystring = '"'.implode(', ', $tmp).'"';

Unpacking would be something like:
$tmp = substr($mystring, 1, strlen($mystring)-1);
$myarr = explode(', ', $tmp);

You may have to fudge it a bit to get the quotes all correct.


David,

No time to look at that carefully tonight but I'll check it tomorrow.

Thanks,

-- tim
May 23 '06 #5
tim

David Haynes wrote:
Tim Streater wrote:
So I want to go from:

$myarr = array (0 => 'firstone', 2 => 'somestring', 5 => 'anotherstr');

to:

$mystring = "'0', 'firstone', '2', 'somestring', '5', 'anotherstr'";

Something like this could be used to pack the string:

$foreach( $myarr as $key => $value ) {
$tmp[] = "'$key'";
$tmp[] = "'$value'";
}
$mystring = '"'.implode(', ', $tmp).'"';

Unpacking would be something like:
$tmp = substr($mystring, 1, strlen($mystring)-1);
$myarr = explode(', ', $tmp);
array keys from the original $myarr are now array values in the new
$myarr
You may have to fudge it a bit to get the quotes all correct.
The quotes are a problem
-david-


What Oli said is right but if you want to do it this way then David's
suggestion of using a foreach/implode/explode would work.

You could make the packing and unpacking, especially the unpacking,
easier and cleaner if you do not quote the keys/values and if you use
two seperators. For example & and = from url query strings.

Tim

May 23 '06 #6
only read the title not your posting, but you might be searching for

serialize()
unserialize()

http://de.php.net/serialize
http://de.php.net/unserialize
May 23 '06 #7
In article <xv****************@newsfe3-win.ntli.net>,
Oli Filth <ca***@olifilth.co.uk> wrote:
Tim Streater said the following on 23/05/2006 17:49:
I have some items, numbered from 0 upwards. Some of them may have a
string attached. All these items need to be represented in a single
already existing database record. So, I thought of taking an array, as
it might be looking thus (the values are all strings):

Key Value
--- -----
0 firstone
2 somestring
5 anotherstr
and so on, and converting it to a single string:

"'0', 'firstone', '2', 'somestring', '5', 'anotherstr'"

then I have a string I can write to the database record.


Is it absolutely mandatory that you put these into a single record?
This is almost certainly a bad idea. Not only do you have to write
conversion functions to get data into and out of the database, but you
data is no longer atomic. Amongst other things, this makes it difficult
to search, index, delete or reference your data...


Oli,

Thanks for pushing me to re-think my strategy. Choosing a good data
representation is most of the battle and while driving home and back to
work this morning [1] I had a think about better ways to represent the
data which would retain the flexibility while not burdening the general
and presentation suite. Generally I don't like hacks anyway as they tend
to come back to bite you.

Thanks to the other responders - there are many functions in PHP I am
not familiar with so being pointed at some new ones for a specific
purpose will be a good exercise.

[1] Radio 4 only had an unfunny comedy program last night and a poor
magazine program this morning, as it happened, so I turned the radio off
while driving.

Cheers,

-- tim
May 24 '06 #8

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by Byron | last post: by
5 posts views Thread by Tim Wong | last post: by
2 posts views Thread by Steve - DND | last post: by
7 posts views Thread by Matthias S. | last post: by
16 posts views Thread by Hugh Janus | last post: by
6 posts views Thread by =?Utf-8?B?TFBldGVy?= | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by suresh191 | last post: by
1 post views Thread by Marylou17 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.