PHP中JSON的应用方法
如何使用JSON。PHP5.2开始内置了JSON的支持。当然,如果低于这个版本的话,那么市面上有很多PHP版本的实现,随 便下一个用就OK啦。现在主要是说说PHP内置支持的JSON。很简单,两个函数:json_encode和json_decode(跟序列化很像啦)。 一个编码,一个解码。先看看编码的使用:
<?php教程
$arr = array(
'name' => '陈毅鑫',
'nick' => '深空',
'contact' => array(
'email' => 'shenkong at qq dot com',
'website' => 'http://www.111cn.net',
)
);
$json_string = json_encode($arr);
echo $json_string;
?>
很简单的将一个数组JSON了。需要指出的是,在非UTF-8编码下,中文字符将不可被encode,结果会出来空值,所以,如果你使用 gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode,上面输出结果如下:
{"name":"u9648u6bc5u946b","nick":"u6df1u7a7a","contact":{"email":"shenkong at qq dot com","website":"http://www.chenyixin.com"}}
我都说了和序列化很像,你还不信。编码后就要解码,PHP提供了相应的函数json_decode,json_decode执行后,将会得到一个对象,操作如下:
<?php
$arr = array(
'name' => '陈毅鑫',
'nick' => '深空',
'contact' => array(
'email' => 'shenkong at qq dot com',
'website' => 'http://www.111cn.net',
)
);
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
?>
访问对象内的属性会吧?$obj->name,这样子的,当然,也可以把它转位数组,方便调用啦:
$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (array) $obj;
print_r($arr);
PHP转来转去的用途不是特别大,除了缓存生成,感觉还不如直接存数组呢,不过,当你和前台交互的时候,它的作用就出来咯,下面看看我怎么用Javascript来使用这段字符:
<script type="text/网页特效">
var arr = {"name":"u9648u6bc5u946b","nick":"u6df1u7a7a","contact":{"email":"shenkong at qq dot com","website":"http://www..com"}};
alert(arr.name)
</script>
上面中,直接将这个字符串赋给一个变量,它就变成一个Javascript数组了(专业化术语应该不叫数组,不过由于PHP的习惯问题,我就 一直叫数组好了,方便理解)。这样,可以很方便的对arr进行遍历或者任意做你想做的事情了。写到这里,好像都没提到AJAX哦?是哦,联想一下,如果服 务端返回的responseText用JSON过的字符串代替XML的话,前台Javascript处理起来是不是很方便呢?狗皮膏药就是这样用的。
其实写到这里,除了数据的存储格式不太一样外,JSON和XML也没什么太大区别哦,不过下面我说的一点。虽然和XML没多大关系,不过, 可以说明JSON更大范围的应用,那就是,跨域的数据调用。由于安全性问题,AJAX不支持跨域调用,这样要调用不同域名下的数据,很麻烦哦,虽然有解决 方案(stone在他的讲座上提到过了代理啊什么的虽然听不懂但是知道能解决)。我写两个文件,足以展示跨域调用了。
主调文件index.html
<script type="text/javascript">
function getProfile(str) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
}
</script>
<body><div id="nick"></div></body>
<script type="text/javascript"" width=100% src="/demo/profile.php"></script>
被调文件profile.php
<?php
$arr = array(
'name' => '陈毅鑫',
'nick' => '深空',
'contact' => array(
'email' => 'shenkong at qq dot com',
'website' => 'http://www.111cn.net',
)
);
$json_string = json_encode($arr);
echo "getProfile($json_string)";
?>
下面二款php教程 正则来表达式来处理url匹配的代码,希望对你有点帮助。
<?php
$url = 'http://www.baidu.com/zongzi/oo.html';
$n = preg_match_all("/http:[/]{2}[a-z]+[.]{1}[a-zd-]+[.]{1}[a-zd]*[/]*[A-Za-zd]*[/]*[A-Za-zd]*[.]*html/",$url,$array);
var_dump($array);
?>
例子
$url = 'http://www.test.com/icons/favicon-54.ico, http://www.baidu.com/bb, http://www.111cn.net, http://img.baidu.com/logo.ico';
$pattern = "|http://[^,]+?.ico,?|U";
preg_match_all($pattern, $url, $matches);
print_r($matches);
输出结果:
Array
(
[0] => Array
(
[0] => http://www.test.com/icons/favicon-54.ico
[1] => http://img.baidu.com/logo.ico
))
PHP Array 函数
PHP:指示支持该函数的最早的 PHP 版本。
函数 | 描述 | PHP |
---|---|---|
array() | 创建数组。 | 3 |
array_change_key_case() | 返回其键均为大写或小写的数组。 | 4 |
array_chunk() | 把一个数组分割为新的数组块。 | 4 |
array_combine() | 通过合并两个数组来创建一个新数组。 | 5 |
array_count_values() | 用于统计数组中所有值出现的次数。 | 4 |
array_diff() | 返回两个数组的差集数组。 | 4 |
array_diff_assoc() | 比较键名和键值,并返回两个数组的差集数组。 | 4 |
array_diff_key() | 比较键名,并返回两个数组的差集数组。 | 5 |
array_diff_uassoc() | 通过用户提供的回调函数做索引检查来计算数组的差集。 | 5 |
array_diff_ukey() | 用回调函数对键名比较计算数组的差集。 | 5 |
array_fill() | 用给定的值填充数组。 | 4 |
array_filter() | 用回调函数过滤数组中的元素。 | 4 |
array_flip() | 交换数组中的键和值。 | 4 |
array_intersect() | 计算数组的交集。 | 4 |
array_intersect_assoc() | 比较键名和键值,并返回两个数组的交集数组。 | 4 |
array_intersect_key() | 使用键名比较计算数组的交集。 | 5 |
array_intersect_uassoc() | 带索引检查计算数组的交集,用回调函数比较索引。 | 5 |
array_intersect_ukey() | 用回调函数比较键名来计算数组的交集。 | 5 |
array_key_exists() | 检查给定的键名或索引是否存在于数组中。 | 4 |
array_keys() | 返回数组中所有的键名。 | 4 |
array_map() | 将回调函数作用到给定数组的单元上。 | 4 |
array_merge() | 把一个或多个数组合并为一个数组。 | 4 |
array_merge_recursive() | 递归地合并一个或多个数组。 | 4 |
array_multisort() | 对多个数组或多维数组进行排序。 | 4 |
array_pad() | 用值将数组填补到指定长度。 | 4 |
array_pop() | 将数组最后一个单元弹出(出栈)。 | 4 |
array_product() | 计算数组中所有值的乘积。 | 5 |
array_push() | 将一个或多个单元(元素)压入数组的末尾(入栈)。 | 4 |
array_rand() | 从数组中随机选出一个或多个元素,并返回。 | 4 |
array_reduce() | 用回调函数迭代地将数组简化为单一的值。 | 4 |
array_reverse() | 将原数组中的元素顺序翻转,创建新的数组并返回。 | 4 |
array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名。 | 4 |
array_shift() | 删除数组中的第一个元素,并返回被删除元素的值。 | 4 |
array_slice() | 在数组中根据条件取出一段值,并返回。 | 4 |
array_splice() | 把数组中的一部分去掉并用其它值取代。 | 4 |
array_sum() | 计算数组中所有值的和。 | 4 |
array_udiff() | 用回调函数比较数据来计算数组的差集。 | 5 |
array_udiff_assoc() | 带索引检查计算数组的差集,用回调函数比较数据。 | 5 |
array_udiff_uassoc() | 带索引检查计算数组的差集,用回调函数比较数据和索引。 | 5 |
array_uintersect() | 计算数组的交集,用回调函数比较数据。 | 5 |
array_uintersect_assoc() | 带索引检查计算数组的交集,用回调函数比较数据。 | 5 |
array_uintersect_uassoc() | 带索引检查计算数组的交集,用回调函数比较数据和索引。 | 5 |
array_unique() | 删除数组中重复的值。 | 4 |
array_unshift() | 在数组开头插入一个或多个元素。 | 4 |
array_values() | 返回数组中所有的值。 | 4 |
array_walk() | 对数组中的每个成员应用用户函数。 | 3 |
array_walk_recursive() | 对数组中的每个成员递归地应用用户函数。 | 5 |
arsort() | 对数组进行逆向排序并保持索引关系。 | 3 |
asort() | 对数组进行排序并保持索引关系。 | 3 |
compact() | 建立一个数组,包括变量名和它们的值。 | 4 |
count() | 计算数组中的元素数目或对象中的属性个数。 | 3 |
current() | 返回数组中的当前元素。 | 3 |
each() | 返回数组中当前的键/值对并将数组指针向前移动一步。 | 3 |
end() | 将数组的内部指针指向最后一个元素。 | 3 |
extract() | 从数组中将变量导入到当前的符号表。 | 3 |
in_array() | 检查数组中是否存在指定的值。 | 4 |
key() | 从关联数组中取得键名。 | 3 |
krsort() | 对数组按照键名逆向排序。 | 3 |
ksort() | 对数组按照键名排序。 | 3 |
list() | 把数组中的值赋给一些变量。 | 3 |
natcasesort() | 用“自然排序”算法对数组进行不区分大小写字母的排序。 | 4 |
natsort() | 用“自然排序”算法对数组排序。 | 4 |
next() | 将数组中的内部指针向前移动一位。 | 3 |
pos() | current() 的别名。 | 3 |
prev() | 将数组的内部指针倒回一位。 | 3 |
range() | 建立一个包含指定范围的元素的数组。 | 3 |
reset() | 将数组的内部指针指向第一个元素。 | 3 |
rsort() | 对数组逆向排序。 | 3 |
shuffle() | 把数组中的元素按随机顺序重新排列。 | 3 |
sizeof() | count() 的别名。 | 3 |
sort() | 对数组排序。 | 3 |
uasort() | 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联。 | 3 |
uksort() | 使用用户自定义的比较函数对数组中的键名进行排序。 | 3 |
usort() | 使用用户自定义的比较函数对数组中的值进行排序。 | 3 |
PHP Array 常量
PHP:指示支持该常量的最早的 PHP 版本。
常量 | 描述 | PHP |
---|---|---|
CASE_LOWER | 用在 array_change_key_case() 中将数组键名转换成小写字母。 | |
CASE_UPPER | 用在 array_change_key_case() 中将数组键名转换成大写字母。 | |
SORT_ASC | 用在 array_multisort() 函数中,使其升序排列。 | |
SORT_DESC | 用在 array_multisort() 函数中,使其降序排列。 | |
SORT_REGULAR | 用于对对象进行通常比较。 | |
SORT_NUMERIC | 用于对对象进行数值比较。 | |
SORT_STRING | 用于对对象进行字符串比较。 | |
SORT_LOCALE_STRING | 基于当前区域来对对象进行字符串比较。 | 4 |
COUNT_NORMAL | ||
COUNT_RECURSIVE | ||
EXTR_OVERWRITE | ||
EXTR_SKIP | ||
EXTR_PREFIX_SAME | ||
EXTR_PREFIX_ALL | ||
EXTR_PREFIX_INVALID | ||
EXTR_PREFIX_IF_EXISTS | ||
EXTR_IF_EXISTS | ||
EXTR_REFS |
收藏了php教程数组的常用操作函数
在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE
boolean in_array(mixed needle,array haystack[,boolean strict])
在数组中找到一个指定的健,如果找到返回TRUE否则返回FALSE
boolean array_eky_exists(mixed key,array array)
在数组中搜索一个特定值,如果找到返回TRUE否则返回FALSE
boolean array_search(mixed needle,array haystack[,boolean strict])
获取数组所有键组成的新数组
array array_keys(array array[,mixed search_value])
获取数组所有值组成的新数组
array array_values(array array)
确定数组大小
integer count(array array[,int mode])
integer sizeof(array array[,int mode])
统计数组元素出现频率
array array_count_values(array array)
删除数组中重复的值,返回一个由唯一值组成的数组
array array_unique(array array)
逆置数组元素顺序,preserve_key如果为TRUE则数组键值顺序不变
array array_reverse(array array[,boolean preserve_key])
置换数组键和值
array array_flip(array array)
数组顺序排序,sort_flags参数可选,默认行为
SORT_NUMBERIC,按数值排序,对整数或浮点数排序很有用
SORT_REGULAR,按照ASCII值排序
SORT_STRING,按接近人所认识的正确顺序排序
asort函数键值顺序不变
void sort(array array[,int sort_flags])
void asort(array array[,int sort_flags])
数组逆序排序,sort_flags参数可选,默认行为
SORT_NUMBERIC,按数值排序,对整数或浮点数排序很有用
SORT_REGULAR,按照ASCII值排序
SORT_STRING,按接近人所认识的正确顺序排序
arsort函数键值顺序不变
void rsort(array array[,int sort_flags])
void arsort(array array[,int sort_flags])
数组自然排序
void natsort(array array)
不区分大小写的自然排序
void natcasesort(array array)
健键值对数组排序
boolean ksort(array array[,int sort_flags])
健键值对数组逆序排序
boolean krsort(array array[,int sort_flags])
根据用户自定义顺序排序
void usort(array array,callback function_name)
将数组合并到一起,返回一个联合的数组。array_merge后面覆盖前面,array_merge_recursive合并在一起
array array_merge(array array1[array array2……])//一个以上
array array_merge_recursive(array array1,array array2[,array ……])//两个以上
键和值组成新的数组
array array_combine(array key,array value)
返回数组一部分,从健offset开始,到offse+length位置结束
array array_slice(array array, int offset [,int length])
删除从offset开始到offset+length结束的所有元素,并以数组的形式返回删除的元素
array array_splice(array, int offset [,int length[,array peplacement]])
求数组的交集,键值为第一个数组中键值
array array_intersect(array array1,array array2[,arrayN……])
求数组的交集包含了键值相等,键值为第一个数组中键值
array array_intersect_assoc(array array1,array array2[,arrayN……])
求数组的差集,第一个数组在其他数组没有的值
array array_diff(array array1,array array2[,arrayN……])
求数组的差集,第一个数组在其他数组没有的值包含了键值相等
array array_diffassoc(array array1,array array2[,arrayN……])
返回数组中一个或多个键值
mixed array_rand(array array[,int num_entries])
随即洗牌函数
void shuffle(array input_array)
对数组中的值求和
mixed array_sum(array array);
将数组分解为一个多维数组,它包含了size个元素
array array_chunk(array array, int size [,boolean preserve_keys])
php教程 打印乘法口绝表代码
刚才php是经常老师会要我们做这个的题目,今天我再做一次打印乘法口绝
<?php
/*
*打印乘法口绝表
*/
echo "九灵九乘法口绝表<br><br><br>";
echo "<table>";
for($i=1;$i<=9;$i++){
echo "<tr>";
for($j=1;$j<=$i;$j++){
echo "<td>".$j."*".$i."=".($j*$i)."</td>";
}
echo "</tr>";
}echo "</table>";
echo "<br><br><br><br><br><br>";
echo "<table>";
for($i=1;$i<=9;$i++){
echo "<tr>";
for($j=$i;$j<=9;$j++){
echo "<td>".$i."*".$j."=".($j*$i)."</td>";
}
echo "</tr>";
}echo "</table>";
?>一个简单的求和
function sum($n)
{
if($n>1)
{
return sum($n-1)+$n;
}else
{
return 1;
}
}
echo sum(100);
php教程 feof函数用法与注意事项
eof() 函数检测是否已到达文件末尾 (eof)。
如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。
语法
feof(file)
参数 描述
file 必需。规定要检查的打开文件。
说明
file 参数是一个文件指针。这个文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。
<?php
$file = fopen("test.txt", "r");
//输出文本中所有的行,直到文件结束为止。
while(! feof($file))
{
echo fgets($file). "<br />";
}
fclose($file);
?>
if(file_exists($pmr_config["datasetfile"])){
$tmp_counter = 0;
$hd = fopen($pmr_config["datasetfile"], "r");
if($hd !== FALSE){
while (!feof($hd)) {
$buffer = fgets($hd);
if($tmp_counter >= $seq){
$result[] = $buffer;
}
$tmp_counter++;
if($tmp_counter >=$seq + $size){
break;
}
}
}else{
echo "warning:open file {$pmr_config["datasetfile"]} failed!PHP_EOL";
}
}else{
echo "warning:file {$pmr_config["datasetfile"]} does not exsits!PHP_EOL";
}
其中当读取行数包括文件结尾的时候,$result数组中总会比期望的内容多出来一个元素:
(boolean)false
按说,如果读取到最后一行,feof函数会返回TRUE,然后while循环就退出了,为什么不是呢?
1
while (!feof($hd)) {
事情原来是这样子的:
<?php
// if file can not be read or doesn't exist fopen function returns FALSE
$file = @fopen("no_such_file", "r");
// FALSE from fopen will issue warning and result in infinite loop here
while (!feof($file)) {
}
fclose($file);
?>
feof() is, in fact, reliable. However, you have to use it carefully in conjunction with fgets(). A common (but incorrect) approach is to try something like this:
<?
$fp = fopen("myfile.txt", "r");
while (!feof($fp)) {
$current_line = fgets($fp);
// do stuff to the current line here
}
fclose($fp);
?>
提示和注释
提示:feof() 函数对遍历长度未知的数据很有用。
注意:如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回 TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。
注意:如果传递的文件指针无效可能会陷入无限循环中,因为 EOF 不会返回 TRUE。