代码之家  ›  专栏  ›  技术社区  ›  flash

从字符串中提取字段

  •  0
  • flash  · 技术社区  · 6 年前

    <?php 
       for ($i = 0; $i < count($data['item']->logistic_out); $i++) {
        echo strtolower($data['item']->logistic_out[$i]->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 回复  |  直到 6 年前
        1
  •  2
  •   Joel Worsham    6 年前

    是的,你应该取消它的商业化。不要回显字符串,只需将它们附加到变量中。所以,就像这样:

    <?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 打印出你需要的东西。

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