2016-08-24 6 views
1

私はそれが簡単だと確信していますが、どこでも情報を読んで読んでいます。私はノブだと知っていますが、今は何を試していいのか分かりません。phpのdbから得られた値をシリアル化しない

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」の値は、常に整数ではないということです。私のウェブサイトのテーマのPHPファイルの一つ上の行があり

、それはこのようなものです私はそれが必要です。時々値がシリアル化された値であり、このような何か:

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

だから、$ CATEGORY_IDは時々23(または任意の他の数)であり、他の回である:1:{S:8:「カテゴリ」。 s:2: "23";}(その他の値も)。

私がする必要があるのは、その行が整数であるかどうかを調べることができる値であるかどうかです。その場合、私はそれを直列化して対応する整数に変換し、その直列化された値の "カテゴリ"セクション(私の例では、23)に格納する必要があるので、$ category_IDは常に整数に等しくなりますシリアル化された値ではありません。

どうすればいいですか?事前に

感謝:)

EDIT & UPDATE:

これが解決されています$category_IDis_number()を使用して数値の場合、コードはこの

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

をあなたは値をチェックすることができます。 –

答えて

0

最初のチェックのようになってしまいました。

ない場合、そうarrayに変換し、categoryをチェックするunserialize()を使用します。

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

Ok、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

用途: `)(` IS_NUMERICによって数値かどう

$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) 
} 
関連する問題