您的位置:首页 > 编程语言 > PHP开发

PHP 字符串操作(一)

2013-04-17 21:07 218 查看

01. 删除字符串两端的空格

使用:ltrim():删除左边的空格

rtrim();删除右边的空格

trim():删除两边的空格

所谓的空白符:换行符、回车符、空格符、水平和垂直制表符、以及空值null。

删除两端的空白符不仅能节省存储控件,还能是<pre>标签里面的数据或文本内容显得更加精准。

此外

上面函数还能用途删除字符串中的指定字符:将需要删除的字符作为第二个参数传入函数
<?php
//删除字符串开始的空格和数字
print ltrim('10 Print $A', ' 0..9');

//删除字符串结尾的分号
print rtirm('SELECT * FROM A;',';');
?>

02. 生成都好分割的数据

数据格式化逗号分割的值(Comma-spearated values, CSV),以便导入到电子表格或者数据库中

使用函数: fputcsv()有数组生成一行CSV格式的数据。
示例:
<?php
$sale = array( 	array('Northeast','01','10001','aa'),
array('Northwest','02','10002','bb'),
array('Southeast','03','10003','cc'),
array('Southwest','04','10004','dd')
);

$fh = fopen('sales.csv','w') or die('Can\'t open the file!');
foreach ($sale as $row){
if( fputcsv($fh,$row) === false ){
die("Can't write CSV");
}
}
fclose($fh) or die("Can\'t close sale.csv");

?>


详细参见PHP函数文档

03. 解析都好分割的数据

<?php
$fp = fopen('sample.csv','r') or die('can\'t open the file');
print "<table>\n";
while($csv_line = fgetcsv($fp)){
print "<tr>";
for($i = 0, $j = count($csv_line); $i < $j;$i++){
print '<td>'.htmlentities($csv_line[$i]).'</td>';
}

print '</tr>\n';
}
print '</table>\n';
fclose($fp) or die("can\'t close file");
?>


04 . 生成字段宽度固定的数据记录

如果需要格式化数据记录,使其中的每个字段都包含特定数量的字符。

pack()函数,向其传递一个空格填充模式的字符串序列作为参数。

个人感觉有点想批量的字符截取:
$books = array( array('Elmer Gantry', 'Sinad Leisd', 1927),
array('The Scarlatti Inher', 'Robert Ludlum', 1971),
array('The parsifal Mosaic', 'William Styron', 1979)
);
foreach($books as $book){
print pack('A25A15A4', $book[0], $book[1], $book[2]). "<br>";
}


当我将上面的print内容换成pack(‘A2A1A4’,。。。。)------------》得到的是
ElS1927

ThR1971

ThW1979
很显然

如果想用空格以外的字符来填充记录,需要使用substr来确保每个字段的值不会太长,而且还要使用sub_pad来保证每个字段值不会过短。
开代码示例:
<?php
$books = array( array('Elmer Gantry', 'Sinad Leisd', 1927),
array('The Scarlatti Inher', 'Robert Ludlum', 1971),
array('The parsifal Mosaic', 'William Styron', 1979)
);
foreach($books as $book){
$title = str_pad(substr($book[0], 0, 25), 25, '.');
$author = str_pad(substr($book[1], 0, 15), 15, '.');
$year = str_pad(substr($book[2], 0, 4), 4, '.');
print "$title$author$year<br>";
}
?>


结果:
Elmer Gantry.............Sinad Leisd....1927

The Scarlatti Inher......Robert Ludlum..1971

The parsifal Mosaic......William Styron.1979

具体参照PHP函数手册了

05. 解析字段宽度固定的数据记录

substr和unpack来解析固定宽度的数据,这边参考PHP经典实例的介绍,自定义功能性函数。
<?php
//substr获取指定长度规则下的字串	substr($str,$start,$end);

//unpack从二进制字符串里面对数据进行解包	unpack($format,$data);

//将字段名称和宽度分别以独立数组的形式作为参数传递给一个解析函数

function fixed_width_substr($field, $data){
$r = array();
for($i = 0; $i < count($data); $i++){
$line_pos = 0;
foreach($field as $field_name => $field_length){
$r[$i][$field_name] = rtrim(substr($data[$i],$line_pos,$field_length));
$line_pos += $field_length;
}
}
return $r;
}

//利用unpack的解析函数
function fixed_width_unpack($format_string,$data){
$r = array();
for($i = 0; $i < count($data); $i++){
$r[$i] = unpack($format_string,$data[$i]);
}
return $r;
}

//测试示例
$booklist  = <<<END
Elmer Gantry             Sinclair Lewis1927
The Scarlatti InheritanceRobert Ludlum 1971
The Parsifal Mosaic      Robert Ludlum 1982
Sophie's Choice          William Styron1979
END;

$books = explode("\n", $booklist);

$book_fields = array('title'=>25, 'author'=>14, 'publication_year'=>4);
$book_array = fixed_width_substr($book_fields,$books);

//或者

$book_array = fixed_width_unpack('A25title/A14author/A4publication_year',$books);


两个函数返回的结果都是

Array
(
[0] => Array
(
[title] => Elmer Gantry
[author] => Sinclair Lewis
[publication_year] => 1927
)

[1] => Array
(
[title] => The Scarlatti Inheritance
[author] => Robert Ludlum
[publication_year] => 1971
)

[2] => Array
(
[title] => The Parsifal Mosaic
[author] => Robert Ludlum
[publication_year] => 1982
)

[3] => Array
(
[title] => Sophie's Choice
[author] => William Styron
[publication_year] => 1979
)

)


另外还有个str_split($str,$num), split分离函数,返回数组,index从0开始。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: