[FX.php List] FMPHP API

DC dan.cynosure at dbmscan.com
Tue Aug 1 14:03:38 MDT 2006


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



More information about the FX.php_List mailing list