2016-08-24 44 views
1

我需要做一些我相信它很简单的事情,但是我在各处阅读和阅读信息并找不到解决方案。我知道,我是一个noob,但我真的不知道还有什么可以尝试的。反序列化从php获取的值php

有在我的网站的主题的PHP文件中的一个线,即是这样的:

global $post; 
if (!is_page()) {$category_ID = get_post_meta($post->ID, '_category_permalink', true);} 
    else {$category_ID = '';} 
$category_parent = pa_category_top_parent_id ($category_ID); 

的事情是,在数据库上“_category_permalink的价值并不总是一个整数,我需要它。有时值是序列化值,像这样:

a:1:{s:8:"category";s:2:"23";} 

所以,$ CATEGORY_ID有时为23(或任何其他数字),而其他时间是:1:{S:8: “类别”; s:2:“23”;}(以及其他值)。

我需要做的是可以检查的东西是在该行是一个整数之后获得的值。在这种情况下,我需要将其反序列化并将其转换为相应的整数,并存储在该序列化值的“类别”部分中(从我的示例中,数字23),因此$ category_ID将始终等于整数数字而不是序列化的值。

我该怎么办呢?

感谢提前:)

编辑& UPDATE:

这已经解决了,代码弄成这个样子

if (!is_page()) { $category_ID = get_post_meta($post->ID, '_category_permalink', true); } else {$category_ID = '';}  
global $wpdb; 
$catmeta = $wpdb->get_row("SELECT post_id, meta_key, meta_value FROM MYDATABASENAMEHERE WHERE post_id = '".$post->ID."' AND meta_key LIKE '_category_permalink'",ARRAY_A); 

if(strpos($catmeta['meta_value'],':{')!==false){ 
$catmeta = unserialize($catmeta['meta_value']); 
$catmeta['meta_value'] = $catmeta['category']; 
} 

$category_parent = pa_category_top_parent_id ($catmeta['meta_value']); 
+0

如果数字或不'is_numeric()来'你可以检查该值。 –

回答

0

首先检查是否$category_ID是使用is_number()一个数字。

如果不是这样,所以使用unserialize()将其转换为array和检查category

if (is_numeric($category_ID)) { 
    # $category_ID is number, use it 
    # your code here... 
} else { 
    # $category_ID is a serialized value 
    $cat = unserialize($category_ID); 
    $category_ID = intval($cat['category']); 
} 
+0

这个问题的价值并不总是相同的,所以我不能像这样添加它。 $ str可以是一个整数或一个序列化的值。序列化格式是相同的,但不完全相同。 – Shinji3rd

+0

@ Shinji3rd如我的回答中所述,检查'$ category_ID'是否是第一个数字。如果它是一个数字,那么使用它。否则,继续'unserialize()'。查看我的更新回答 – Jason

+0

好的,is_number不起作用。相反,该命令是is_numeric。但是,尽管通过逻辑它应该工作,在这种情况下它没有。最后,经过多次调查,我找到了一个解决方案。我的原始讯息已被编辑,以包含它。谢谢你的帮助! – Shinji3rd

0

不要担心。 您可以检查,如果这是这个码数:

//check if is numeric 
if(is_numeric($category_parent)){ 
    $category_parent_id = $category_parent; 
    } else { 
    //if is array unserialize 
    $category_parent_array = unserialize($category_parent); 
    //use array to get the id 
    $category_parent_id = $category_parent_array['category']; 
    } 
+0

此代码看起来很有前途,我试过了,但它不起作用。但是我修改了一些,因为我需要检查的值是$ category_ID而不是$ category_parent,但是很奇怪,因为它看起来不起作用。 – Shinji3rd

0

使用下面的代码:

$data = unserialize('a:1:{s:8:"category";s:2:"23";}'); 
$category = $data['category']; 
if(is_numeric($category)){ 
    //Write code here if category is numeric (integer) 
}else{ 
    //Write code here if category is string (not numeric) 
}