Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.php > #8748
| From | Jerry Stuckle <jstucklex@attglobal.net> |
|---|---|
| Newsgroups | comp.lang.php |
| Subject | Re: split array and string from string (trust me it will make sense when you read) |
| Date | 2013-03-19 20:45 -0400 |
| Organization | A noiseless patient Spider |
| Message-ID | <kib0o8$sp9$1@dont-email.me> (permalink) |
| References | <a9993724-7709-41e0-9412-02ed3056d12d@googlegroups.com> <ki9np5$2ll$3@dont-email.me> <3514efbb-74a4-41e7-8fac-2092a94cbc95@googlegroups.com> |
On 3/19/2013 8:34 PM, CloudPress wrote:
> On Tuesday, March 19, 2013 6:06:28 AM UTC-7, Jerry Stuckle wrote:
>> On 3/19/2013 12:12 AM, CloudPress wrote:
>>
>>> I have a string that consists of several key value pairs such as [key=value], a given key may appear more than once.
>>
>>>
>>
>>> For example a string of:
>>
>>>
>>
>>> "Hello world, [key=value] [key2=value1] This is just a test. [key=value2]"
>>
>>>
>>
>>> I want to do two things, one I want an easier way to view the key value pairs, I am thinking an array
>>
>>>
>>
>>> array ('key' => array ('value', 'value2'), 'key2' => 'value1');
>>
>>>
>>
>>> Secondly I want the key/value pairs removed from the string so I would get the array and a new string that would look like this:
>>
>>>
>>
>>> "Hello world, This is just a test."
>>
>>>
>>
>>> What would be the easiest way to accomplish this?
>>
>>>
>>
>>
>>
>> Maybe a regex?
>>
>>
> Truth be told I don't know anything about regex. I threw together an example of how I think I can step though a string to do this.
>
> $actions = array();
> $done = false;
> while (!$done) {
> $start = strpos($content, "[");
> $end = strpos($content, "]");
> $equal = strpos($content, "=");
> $key = "";
> $value = "";
> if ($equal != false && $equal > $start && $equal < $end) {
> $key = substr($content, $start + 1, $equal - $start);
> $value = substr($content, $equal + 1, $end - $equal);
> if (array_key_exists($key, $actions)) {
> if (is_array($actions[$key])) {
> $actions[$key][] = $value;
> }else{
> $existing_value = $actions[$key];
> $actions[$key] = array ($existing_value, $value);
> }
> }else{
> $actions[$key] = $value;
> }
> str_replace("[" . $key . "=" . $value . "]", "", $content, 1);
> }else{
> $key = substr($content, $start + 1, $end - $start);
> $actions[$key] = true;
> str_replace("[" . $key . "]", "", $content, 1);
> }
> if ($start == false || $end == false) {
> $done = true;
> }
> }
>
> This should...in theory find the first set of brackets if there is a "=" it should separate out the part before the = as the key and the part after as the value, add to an array, using a sub array if the same key is duplicated with different values. If not it will just store the text as the key with a value of true. It will then replace the full sub-string from [ to ] with null effectively removing it then search for the next one until it finds no more bracket sets.
>
> Any feedback, ideas on a better implementation?
>
That's the hard way. Look up a regex tutorial - there are several good
ones on the internet. What you're looking for shouldn't be that hard
(even I could probably come up with something even though I'm by far not
an expert in regex).
Then look at the preg_xxx() functions in PHP.
The only thing to remember is in PHP you need a separator character at
the start and end of the regex string, i.e. '!regex goes here!'. It
doesn't have to be an ! - it can be any character, preferably one not in
the regex.
And please don't top post. This newsgroup (and most of usenet) uses
bottom or interleaved posting. Thanks.
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Back to comp.lang.php | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-18 21:12 -0700
Re: split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-18 21:17 -0700
Re: split array and string from string (trust me it will make sense when you read) Jerry Stuckle <jstucklex@attglobal.net> - 2013-03-19 09:06 -0400
Re: split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-19 17:34 -0700
Re: split array and string from string (trust me it will make sense when you read) Jerry Stuckle <jstucklex@attglobal.net> - 2013-03-19 20:45 -0400
Re: split array and string from string (trust me it will make sense when you read) CloudPress <cloudpresshosting@gmail.com> - 2013-03-19 17:56 -0700
Re: split array and string from string (trust me it will make sense when you read) Christoph Becker <cmbecker69@gmx.de> - 2013-03-20 02:21 +0100
Re: split array and string from string (trust me it will make sense when you read) Jerry Stuckle <jstucklex@attglobal.net> - 2013-03-19 21:43 -0400
csiph-web