八 11
PHP5.2以上版本中可使用函数json_encode和json_decode操作JSON。
json_encode 用于将数组转化为JSON对象
json_decode 用于将JSON对象转化为PHP对象或者数组
两者的使用说明,可以参见手册上的函数说明。
下面介绍几个实例和应用中需要注意的地方。
- json_encode 只作用于utf8编码的数据,非utf8编码数据需要转换
数组转化为utf8:
$encodedArray = array_map(utf8_encode, $rawArray);
- json_decode也只能作用于utf8编码的数据,否则返回结果可能为NULL
$contents = file_get_contents($url);
$contents = utf8_encode($contents);
$results = json_decode($contents);
- php中的对象名要用双引号,否则json_decode会出错
Bad(s) (return NULL):
{30:'13',31:'14',32:'15'}
{[30:'13',31:'14',32:'15']}
{["30":"13","31":"14","32":"15"]}
Good :
[{"30":"13","31":"14","32":"15"}]
相关资源:JSON在线验证
Related posts
八 11
SmartTemplate是一种PHP模板引擎,可以将php代码中的变量通过assgine函数赋值给模板输出变量。当php代码中欲输出的变量为数组时,怎样才能在模板中正确的输出呢?
使用Begin….End语句,可以读取一个整数索引数组的值,而数组中的元素则必须为字符串索引的数组。上面的话不好理解,给两个例子:
$users = array(
array( 'NAME' => 'John Doe', 'GROUP' => 'ADMIN' ),
array( 'NAME' => 'Jack Doe', 'GROUP' => 'SUPPORT' ),
array( 'NAME' => 'James Doe', 'GROUP' => 'GUEST' ),
array( 'NAME' => 'Jane Doe', 'GROUP' => 'GUEST' ),
);
$links = array(
array(
'TITLE' => 'PHP',
'URL' => 'http://www.php.net/',
),
array(
'TITLE' => 'Apache',
'URL' => 'http://www.apache.org/',
),
array(
'TITLE' => 'MySQL',
'URL' => 'http://www.mysql.com/',
),
);
在模板文件中使用Begin…End语句,
<!-- BEGIN users -->
<tr class="col{ROWBIT}">
<td> {ROWCNT} </td>
<td> {NAME} </td>
<td> {GROUP} </td>
</tr>
<!-- END users -->
<!-- BEGIN links -->
<a href="{URL}"> {TITLE} </a>
<!-- END links -->
ROWCNT : 此元素在父数组中的具体位置 (0,1,2,3,…n)
ROWBIT : 此元素在子数组中的位置. (0,1,0,1,0,1,…)
最后输出的结果为
<tr class="col0">
<td> 0 </td>
<td> John Doe </td>
<td> ADMIN </td>
</tr>
<tr class="col1">
<td> 1 </td>
<td> Jack Doe </td>
<td> SUPPORT </td>
</tr>
<tr class="col0">
<td> 2 </td>
<td> James Doe </td>
<td> GUEST </td>
</tr>
<tr class="col1">
<td> 3 </td>
<td> Jane Doe </td>
<td> GUEST </td>
</tr>
<a href="http://www.php.net/"> PHP </a>
<a href="http://www.apache.org/"> Apache </a>
<a href="http://www.mysql.com/"> MySQL </a>
参考:smarttemplate中文文档(部分)
Related posts
八 10
安装php5和mysql5可以直接下载安装包,并执行安装程序。因为php5默认是不支持mysql的,所以需要对php.ini进行设置。
如果你用IIS作为web server,则在windows目录下找php.ini。如果是apache作为web server,则在apache安装目录下找php.ini。
然后修改php.ini,将;extension=php_mysql.dll这行最前端的“;”去掉。接着就是需要注意的地方了,一定要copy php目录下的libmysql.dll到window系统目录中,否则无法加载。最后重启Apache,使用phpinfo查看一下,mysql是否加载成功。
===2009.9.3 更新===
今日发现使用PHP5.2.10版本+MySQL5.1.3版本时会因为PHP和MySQL的版本问题,引起php_mysql无法加载的情况。
使用php_mysqli模块,访问phpMyAdmin时出现提示:Your PHP MySQL library version 5.0.67 differs from your MySQL server version 5.1.30.
经查询,发现时由于PHP5.2版本中的php_mysql扩展无法支持MySQL5.1.3
经重新安装低版本的MySQL5.0后,php_mysql可以正常加载,且phpMyAdmin也未出现其他异常提示
Related posts
八 08
今天在测试机上使用PHP连接MS SQL Server,按照老办法无非就是以下三个步骤就能搞定
- 在Apache的httpd.conf中找到PHPIniDir的位置,然后找出php.ini来
- 去掉php.ini中“;extension=php_mssql.dll” 前方的分号
- 重启Apache
但是今天试了多次,仍然在phpinfo中无法看到成功加载mssql的信息。Google了一下,发现问题是由Windows目录下的ntwdblib.dll版本太早而引起的。如果你发现服务器上的该文件版本小于 80.194.0,则很有可能造成PHP无法加载mssql扩展的问题。
要解决也很简单,可以找一台安装SQL Server的机器,copy该机上的同名文件,或在 这里 下载一个新版本的覆盖服务器上的同名文件即可。
参考文章:http://www.userscape.com/helpdesk/index.php?pg=kb.page&id=13
Related posts
八 06
近来在测试Joomla,想实现的一个功能是将Joomla中的模块加入到单元/分类的介绍中,在后台管理中似乎没有这样的设置,而修改模板index.html文件,增加新的position也无法达到想要的效果。最后在Joomla!中文技术讨论区中寻求帮助,终于找到了解决方法。
一、最新版(1.5.3以上)中,可以在单元/分类介绍中直接加入如下代码:
{loadposition ***}
然后在模块管理中,将希望插入到介绍部分的模块位置设置为***(与loadposition后面的位置一致)。这样就可以在介绍部分插入相应的模板了,但是因为css的问题,模块样式会消失。要如何实现css,我还没有测试,大概可以通过模块管理中的css后缀,进行修改。
二、其他版本(1.5.*)安装loadmodule_for_category_description_v1.5插件,可以在文章中任意位置加入模块
- 下载安装。安装时,在joomla后台管理:扩展-》安装卸载—》上传压缩包文件-》选择下载好的zip文件进行安装
- 在扩展-》插件管理中启用loadmodule for Section/Category Description
- 在分类介绍模板中增加触发器
打开<Joomla root folder>/components/com_content/views/category, 找到view.html.php
- 打开该文件,转到39行,在其后加入下面的代码
-
$category =& $this->get('Category');
$dispatcher =& JDispatcher::getInstance();
JPluginHelper::importPlugin('content');
$results = $dispatcher->trigger('onBeforeDisplayTitle', array (& $category));
- 保存
- 在单元介绍模板中增加触发器
打开<Joomla root folder>/components/com_content/views/section, 找到view.html.php
- 打开该文件,转到39行,在其后加入下面的代码
-
$section =& $this->get('Section');
$dispatcher =& JDispatcher::getInstance();
JPluginHelper::importPlugin('content');
$results = $dispatcher->trigger('onBeforeDisplayTitle', array (& $section));
- 转到87行,加入
-
$dispatcher =& JDispatcher::getInstance();
JPluginHelper::importPlugin('content');
for($i = 0; $i < count($categories); $i++)
{
$category =& $categories[$i];
$category->link = JRoute::_('index.php?view=category&id='.
$category->slug);
$results=$dispatcher->trigger('onBeforeDisplayTitle', array(&$category));
}
if ($total == 0) {
$params->set('show_categories', false);
}
- 保存
- 在单元/分类介绍,或者文章内容的任意地方加入{loadposition ***},然后再在模块管理中设置模块位置为***,就可以实现在介绍或者文章中插入模块。
参考内容:
更新:
文章中提到新增加的模块css问题,可以在单元/分类介绍中使用HTML编辑,这样就可以设置新加入模块的css了,例如:
<div class = "module heading">
{loadposition ***}
</div>
Related posts
Recent Comments