以下是代码:
<? $fields = json_decode($this->item->extra_fields);
$allowed_fields= array('3','5');
if ( $fields != NULL ) {
foreach ( $fields as $field ) {
if ( in_array($field->id, $allowed_fields ) && $field->value != NULL) {
?>
<span class = "list_for<? echo $field->id; ?>">
<? echo $field->value;?></span><? } } }?>
当我将json_decode更改为json_encode时,我收到以下错误:
Warning: Invalid argument supplied for foreach()...
----------
从PHP升级到5.4之前一切正常。
我不是开发人员,所以请尽量不要太技术化。提前谢谢!
答案 0 :(得分:2)
如上所述in the manual,就像这样做
$fields = json_decode($this->item->extra_fields, true);
当为TRUE时,返回的对象将被转换为关联数组。
$ fields将是一个数组,foreach()
将起作用
答案 1 :(得分:0)
您无法检查其NULL
。
<? $fields = json_decode($this->item->extra_fields);
$allowed_fields= array('3','5');
if($fields) {
foreach ( $fields as $field ) {
if ( in_array($field->id, $allowed_fields ) && $field->value != NULL) {
?>
<span class = "list_for<? echo $field->id; ?>">
<? echo $field->value;?></span><? } } }?>
尝试if($fields) {
如果他能解码json字符串,你就会得到真的。
答案 2 :(得分:0)
<?php
$fields = json_decode($this->item->extra_fields);
$allowed_fields= array('3','5');
if ( !empty($fields) ) {
foreach ( $fields as $key => $field ) {
if ( in_array($field->id, $allowed_fields ) && !empty($field->value)) {
?>
<span class = "list_for<?php echo $field->id; ?>">
<?php echo $field->value;?></span>
<?php
}
}
}
?>
请复制粘贴此代码并检查错误是否删除。 您无法使用NULL检查$字段。因此您只需使用!empty($ fields)
进行检查答案 3 :(得分:0)
请注意 json_decode 接受字符串,根据上述错误,您尝试将数组传递给它,因此如果您需要迭代字段数组,则可能需要忽略 json_decode ,因为你似乎已经有了一个数组。
json_encode 接受数组,但它会提供一个字符串,以便在您尝试迭代sting时给出警告
请尝试下面的代码。
<? $fields = $this->item->extra_fields;
$allowed_fields= array('3','5');
if ( $fields ) {
foreach ( $fields as $field ) {
if ( in_array($field->id, $allowed_fields ) && $field->value != NULL) {
?>
<span class = "list_for<? echo $field->id; ?>">
<? echo $field->value;?></span><? } } }?>
答案 4 :(得分:0)
测试一下。在发送到PHP之前,将jsonObj更改为string。
jsonObj{..}
jsonObj2=JSON.stringify(jsonObj);
$.ajax({
type: "POST",
url:"Methods.php",
data : { 'Json_data':jsonObj2},
success: function(response) {
console.log("Result:" + response);
}
});