从字符串中提取字段

时间:2018-08-16 15:03:24

标签: php serialization

我在一个网站上工作,我想在其中从字符串中提取几个字段。我用来获取该字符串的代码是:

<?php 
   for ($i = 0; $i < count($data['item']->logistic_out); $i++) {
    echo strtolower($data['item']->logistic_out[$i]->logistics_times);

   }
?>

上面的回显代码正在打印以下字符串,该字符串是logistics_times:

a: 7: {
    s: 3: "mon";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
    s: 3: "tue";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
    s: 3: "wed";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
    s: 3: "thu";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
    s: 3: "fri";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
    s: 3: "sat";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
    s: 3: "sun";a: 2: {
        s: 5: "start";s: 5: "09:00";s: 3: "end";s: 5: "21:00";
    }
}

问题陈述:

我想知道我应该在上面的代码中进行哪些更改,以使其看起来像这样:

mon 09:00   21:00
tue 09:00   21:00

我很确定我必须使用unserialize方法,但是我不确定如何在上面的代码中有效地使用它。

1 个答案:

答案 0 :(得分:2)

是的,您应该反序列化它。不要回显您的字符串,只需将它们附加到变量中即可。因此,像这样:

<?php 
   $serialized = '';
   for ($i = 0; $i < count($data['item']->logistic_out); $i++) {
    $serialized .= strtolower($data['item']->logistic_out[$i]->logistics_times);
   }
?>

然后,将其反序列化,它将变成一个数组:

$unserialized = unserialize( $serialized );

现在,您可以通过foreach遍历数组以打印出所需的内容。

请注意,即使您的序列化字符串中只有一个小错误,也将无法使用。您手动构建序列化字符串的事实令人担忧,您可能需要评估此处是否有更好的起点。