【问题标题】:extracting fields from a string从字符串中提取字段
【发布时间】:2018-08-16 15:03:23
【问题描述】:

我正在开发一个想要从字符串中提取几个字段的网站。我用来获取该字符串的代码是:

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

   }
?>

上面的回显代码正在打印以下字符串,即logistic_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 方法,但我不确定如何在上面的代码中有效地使用它。

【问题讨论】:

  • 该数据看起来可能是数组上serialize() 的结果。是这样吗??
  • 我不确定,但 logistics_times 正在从数据库中提取,
  • 首先做一个简单的print_r(unserialize($data['item']-&gt;logistic_out[$i]-&gt;logistics_times)); 并查看数组的样子#

标签: php serialization


【解决方案1】:

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

<?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 循环遍历您的数组以打印出您需要的内容。

请注意,即使您的序列化字符串中有一个微小的错误,它也不会起作用。您手动构建序列化字符串这一事实有点令人担忧,您可能需要评估这里是否有更好的起点。

【讨论】:

  • 只是一个想法,logistics_times 的每次迭代都可能是一个独特的serialize() 所以你最好建议unserialize() 作为循环的一部分而不是所有的合并绝对行不通的序列化数组
  • @RiggsFolly 我想知道反序列化字符串的正确方法是什么。我很确定我必须使用类似$data = unserialize(str_replace(' ', '', $str)); foreach($data as $key=&gt;$value) { echo $key." ".$value['start']." ".$value['end']."&lt;br/&gt;"; } 的东西,但我不确定如何才能适应实际代码。
  • @RiggsFolly 你在吗?
  • @flash 是的,我在这里
  • @RiggsFolly 你能给我指点我如何打印mon 09:00 21:00 tue 09:00 21:00 吗?有什么想法吗?
猜你喜欢
  • 2011-10-13
  • 2020-07-05
  • 2011-08-02
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 2016-10-15
相关资源
最近更新 更多