[FX.php List] FMPHP API

DC dan.cynosure at dbmscan.com
Tue Aug 1 15:37:05 MDT 2006


ok, now we're getting somewhere.

so, you have a more complicated parsing task.

you don't just have a space delimited string, you have a number, then  
a space, then some range of characters that could also include a  
space. that, of course, would confound a simple list() and explode()  
parser.

you now have two choices(besides your clever but opaque use of strcspn 
()!), both of which incidentally still use list():

list() with sscanf()

OR

list with() preg_split()

both of these functions offer VERY powerful parsing for almost every  
situation. it would behoove any new PHP coder to become familiar with  
both.

try one of these parsing techniques. i think the sscanf() version is  
a little cleaner, but some people might be more familiar with regular  
expressions than with the sscanf() parsing language. in this case,  
though sscanf() parsing definition is VERY easy to read and the  
preg_split() regular expression is not and the preg_split() function  
requires 2 ugly CONSTANTS to make it behave. for other tasks  
preg_split() will be better, but in this case sscanf() shines.

i set these up in a repeat loop to show how they successfully parse  
your range of strings.

<?php
// shows two ways to parse a slightly complicated string

$value_list = array("311 Dell", "12 My Company Name");

// parse the strings using preg_split()
foreach ($value_list as $string_to_parse) {
	echo $string_to_parse.'<br>';
	list($num,$text)=preg_split('/([0-9]+)\s([a-zA-Z]+)/', 
$string_to_parse,-1,PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE);
	echo "num: $num <br>";
	echo "text: $text <br>";
}

echo "<hr>";

// show sscanf() doing the same thing
foreach ($value_list as $string_to_parse) {
	echo $string_to_parse.'<br>';
	list($num,$text)=sscanf($string_to_parse,'%d %s');
	echo "num: $num <br>";
	echo "text: $text <br>";
}

?>

in case your email reader mangles the code, i put it here in  
Miscellaneous section:
http://www.dbmscan.com/snippets/index.php?cat_select=Miscellaneous

your choice. let me know if i can be of assistance...

cheers,
dan



On Aug 1, 2006, at 4:17 PM, AC wrote:

> Dan,
>
> I needed the contents of a FM valuelist in PHP.
> The values could be "311 Dell" or "12 My Company Name".
> Should I still be using the list() & explode() function to obtain  
> the ID number portion?
> If I should use the substr() function, then what function do I use  
> to determine how many characters the ID is?
>
>
>
>
> On Aug 1, 2006, at 4:03 PM, DC wrote:
>
>> hi AC,
>>
>> just to make sure we're still talking about the same issue here...
>>
>> you want to take a string, say "311 Dell", and assign two  
>> variables, one that holds the first part and one that holds the  
>> second part. the first and second part are separated (delimited)  
>> by a space character. Is that the goal?
>>
>> assuming it is... my advice is that you want to end up with those  
>> two variables with the minimum of fuss and with a standard PHP  
>> code style.
>>
>> list() with explode() is the most standard way of getting two PHP  
>> variables from a simple delimited string:
>>
>> <?php
>> $num_and_text_separated_by_space = "311 Dell";
>> list($num,$text)=explode(' ', $num_and_text_separated_by_space);
>> echo $num;
>> echo $text;
>> ?>
>>
>> The equivalent of FMP
>> Left("text",2)
>>
>> in PHP is:
>> substr("text",0,2);
>>
>> you see here i just hard coded the number two to get the first two  
>> characters of "text". FMP Left() is for getting left characters.  
>> substr() is for getting any substring of characters. substr() is  
>> way more flexible than FMP Left(). By changing the parameters, it  
>> can also be used for FMP's Right() or Middle(). see the PHP manual  
>> for how to use it fully.
>>
>> so, when you ask, "what function should I be using inside "substr 
>> ()" instead of the "strcspn()" function?" that is the wrong  
>> question. the right question is: "what is the best, clearest way  
>> to get my data from a space-delimited string into PHP variables?  
>> the answer to that is list() with explode().
>>
>> yes, i would say that strcspn() is a specialty function. i didn't  
>> say you shouldn't use it... i said you should have a good reason  
>> to use it that outweighs the confusion it may cause you or your  
>> colleagues down the road because it is an unusual usage for what  
>> you are trying to do.
>>
>> so, the substr(Text, 0, strcspn(Text, " ")) function may seem to  
>> work fine, but to the experienced PHP eye it is quite opaque. if  
>> you want to write clear, concise code then consider using list()  
>> with explode().
>>
>> cheers,
>> dan
>>
>>
>> On Aug 1, 2006, at 2:54 PM, AC wrote:
>>
>>> Not meaning to beat a dead horse here;
>>> - you said the equivalent of the FileMaker "Left()" function is  
>>> the PHP "substr()" function
>>> - you also said the PHP "strcspn()" function is not a common  
>>> function to use
>>> - I'm currently using    substr(Text, 0, strcspn(Text, " "))
>>> - what function should I be using inside "substr()" instead of  
>>> the "strcspn()" function?  (I'm completely new to PHP so I assume  
>>> I'm just missing the obvious answer)
>>>
>>>
>>>
>>> On Jul 31, 2006, at 11:41 AM, DC wrote:
>>>
>>>> well, strcspn() is another obscure function. i've been coding  
>>>> PHP on a daily basis for several years now and i had to look it  
>>>> up! it may have a specialized usage and you've certainly  
>>>> demonstrated one interesting one ;-) it took me a minute to wrap  
>>>> my head around that one.
>>>>
>>>> But, your best bet for code share-ability, maintainability and  
>>>> readability is to know and explore the outer reaches of PHP  
>>>> functions but when writing PHP to accomplish basic tasks, use  
>>>> standard PHP idioms like list with explode. PHP offers multiple  
>>>> paths to the same outcome but if you write code with  
>>>> idiosyncratic idioms you're going to run into trouble down the  
>>>> road - with other PHP coders and with your own memory.
>>>>
>>>> FYI, the equivalent to FMP's left() function in PHP is substr():
>>>>
>>>> http://us2.php.net/manual/en/function.substr.php
>>>>
>>>> Cheers and happy coding,
>>>> dan
>>>>
>>>> On Jul 28, 2006, at 8:04 PM, AC wrote:
>>>>
>>>>> Thanks Andrew & Dan,
>>>>>
>>>>> I had found both strtok() and list() with explode().
>>>>> I guess I'm still thinking in FileMaker terms when I'm doing  
>>>>> things in PHP so I was looking for something like;
>>>>> Left(Text, NumOfChar) and Replace(Text, Start, Size,  
>>>>> ReplacementText)
>>>>> I just figured since PHP had such an easy function to grab the  
>>>>> remainder of the string (the equivalent of the FM Replace  
>>>>> command) that it probably also had an easy equivalent of the FM  
>>>>> Left command.
>>>>> Based on your answers I'm guessing it doesn't and the    substr 
>>>>> (Text, 0, strcspn(Text, " "))    command is the closest  
>>>>> equivalent.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Jul 28, 2006, at 6:01 PM, DC wrote:
>>>>>
>>>>>> i would stay away from strtok()
>>>>>>
>>>>>> strtok() is a confusing function because it has an internal  
>>>>>> stack that 'remembers' how many times you've called it and  
>>>>>> then you have to call it the number of times that you have  
>>>>>> strings to split.
>>>>>>
>>>>>> much better and more widely used and standard is to use this  
>>>>>> construction using list() and explode()
>>>>>>
>>>>>> $variable = "311 something";
>>>>>> list($number,$word) = explode(' ',$variable);
>>>>>>
>>>>>> now you'll have two nicely named variables one that has the  
>>>>>> number and one that has the word
>>>>>>
>>>>>> cheers,
>>>>>> dan
>>>>>>
>>>>>> On Jul 28, 2006, at 3:59 PM, Andrew Denman wrote:
>>>>>>
>>>>>>> Don't know about your first question, but for the second one,  
>>>>>>> it looks like
>>>>>>> you want to break the string on the spaces.  Check out strtok():
>>>>>>> http://us3.php.net/manual/en/function.strtok.php
>>>>>>>
>>>>>>> Andrew Denman
>>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: fx.php_list-bounces at mail.iviking.org
>>>>>>> [mailto:fx.php_list-bounces at mail.iviking.org] On Behalf Of AC
>>>>>>> Sent: Friday, July 28, 2006 2:51 PM
>>>>>>> To: FX.php Discussion List
>>>>>>> Subject: [FX.php List] FMPHP API
>>>>>>>
>>>>>>> Anyone know if this API will grab both value fields from  
>>>>>>> value lists
>>>>>>> that are based on 2 fields ex.
>>>>>>> The "Company" value list uses the fields "IDCompany" and  
>>>>>>> "CompanyName".
>>>>>>> In FX only the IDCompany is returned.
>>>>>>> Does this API return both values?
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Also, assuming I had   MyVariable = "316 Dell"
>>>>>>> I can use the function    strstr(MyVariable, " ")
>>>>>>> to get the "Dell" part by itself but to get the 316 I'm  
>>>>>>> currently doing
>>>>>>>    substr(MyVariable, 0, strcspn(MyVariable, " "))
>>>>>>> Is there an easier way to get the 316 by itself (assuming it  
>>>>>>> could also
>>>>>>> be text)?
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> FX.php_List mailing list
>>>>>>> FX.php_List at mail.iviking.org
>>>>>>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> FX.php_List mailing list
>>>>>>> FX.php_List at mail.iviking.org
>>>>>>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>>>>>
>>>>>> _______________________________________________
>>>>>> FX.php_List mailing list
>>>>>> FX.php_List at mail.iviking.org
>>>>>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> FX.php_List mailing list
>>>>> FX.php_List at mail.iviking.org
>>>>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>>>
>>>> _______________________________________________
>>>> FX.php_List mailing list
>>>> FX.php_List at mail.iviking.org
>>>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>>>
>>>>
>>>
>>> _______________________________________________
>>> FX.php_List mailing list
>>> FX.php_List at mail.iviking.org
>>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>
>> _______________________________________________
>> FX.php_List mailing list
>> FX.php_List at mail.iviking.org
>> http://www.iviking.org/mailman/listinfo/fx.php_list
>>
>>
>
> _______________________________________________
> FX.php_List mailing list
> FX.php_List at mail.iviking.org
> http://www.iviking.org/mailman/listinfo/fx.php_list



More information about the FX.php_List mailing list