【问题标题】:Convert array to different type将数组转换为不同的类型
【发布时间】:2019-01-27 01:50:59
【问题描述】:

好久没接触 PHP 了,有点生疏了。我需要一些关于从这里去哪里的指导。

我有两个数组要比较并找出差异,但是我无法比较这两个数组,因为它们的格式不正确。

我不完全确定这些格式的名称,并且通常不会深入研究 PHP 领域。

这是我要转换的第一个数组:

    Array (
            [0] => 2018-08-21 10:00:00 
            [1] => 2018-08-28 10:00:00
            [2] => 2018-09-04 10:00:00 
            [3] => 2018-09-11 10:00:00
            [4] => 2018-09-18 10:00:00
          )

我想转换成这样的东西:

   Array ( 
           '0' => '2018-08-21 10:00:00', 
           '1' => '2018-08-28 10:00:00',
           '2' => '2018-09-04 10:00:00', 
           '3' => '2018-09-11 10:00:00', 
           '4' => '2018-09-18 10:00:00'
         )

完成此操作后,我可以使用 array_diff 将其与另一个数组进行比较,但是在那之前我有点卡住了。任何帮助将不胜感激。

我要比较的第二个数组格式相同。但具有不同的价值。

这是我的问题:https://3v4l.org/f734u

这是我想要的示例:https://3v4l.org/oeXHR

提前致谢。

【问题讨论】:

  • 两个数组是一样的。你想做什么?
  • 我无法使用 array_diff 比较两者,因为第一个数组的格式不正确。仅当两个数组在每个值周围都有 '' 时才有效。 @FelippeDuarte
  • 它们是一样的,你可以在这里看到:3v4l.org/guC6v
  • 感谢您的帮助。我可能没有正确解释。该数组是从 WordPress 数据库中提取的。所以我错过了每个值周围的“”标记。在此处查看我的示例:3v4l.org/f734u。 @FelippeDuarte
  • 元素的键也可以是整数-因此无需将其设为字符串。但是您的值无效,这就是您收到 php 解析错误的原因。你有一个日期,所以值应该是一个字符串或一些 DateTime 对象。似乎您的数组拉取代码不正确。可以展示一下吗?

标签: php wordpress


【解决方案1】:

如果您绝对确定您的第一个数组字符串中的数据是安全的,并且总是这样,您可以执行以下操作将其转换为真正的数组:

$array_string = 'Array ( [0] => 2018-08-21 10:00:00 [1] => 2018-08-28 10:00:00 [2] => 2018-09-04 10:00:00 [3] => 2018-09-11 10:00:00 [4] => 2018-09-18 10:00:00 )';

$array_string = preg_replace('/\[(\d+)\] => (.*?)(?=\s+[[)])/s', "'$1' => '$2',", $array_string);
eval("\$array1 = $array_string;");
// $array1 contains the array

这里的演示: https://3v4l.org/G2B5i

或者(更安全),您可以使用具有相同模式的preg_match_all 并自己手动构建数组。

您也可以go through serialized form/deserialization,它的风险也较小并且可以处理更多的情况(不过那里的代码使用的格式略有不同,因此您可能需要对其进行调整)。

【讨论】:

    猜你喜欢
    • 2016-09-17
    • 2010-11-26
    • 1970-01-01
    • 2017-01-11
    • 2013-05-01
    • 2013-03-28
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多