【问题标题】:PHP explode string vs array?PHP爆炸字符串与数组?
【发布时间】:2012-06-07 17:04:11
【问题描述】:

是否有理由在需要数组的地方使用字符串?

我有一个开发人员想要传递一个分隔字符串,在数据库类方法中分解它以从 2 个单独的字符串中提取多个字段/值对。我想不出不发送字符串数组的理由。

示例:

$s = "value1|value2|value3" ;
$s2 = explode("|", $s);

与数组

$s3 = array(
    "1" => "value1",
    "2" => "value2",
);

我知道这个想法实际上是传递未知数量的键/值对,但我认为你爆炸出来的字符串不是答案。但我可能是错的。

【问题讨论】:

  • 字符串数组是什么意思?字符串和数组是非常不同的数据类型。
  • 开发人员想要传递多个字符串值以在 SQL 查询中使用。
  • 只要阵列版本可用,我都会使用它!另一种变体可能仅在明确需要字符串的上下文中有用。
  • 这是应用程序上下文中的新架构。我个人的感觉是尽可能使用数组,而不是创建必须爆炸出来的字符串。

标签: php arrays string explode


【解决方案1】:

我想不出不发送字符串数组的理由。

字符串是一个单一的实体。您的同事使用字符串“object”(变量或实体意义上的对象)使其携带信息,这是一种非常小的领域特定语言形式。

但正如它已经表明的那样,这只是开销,没有必要。可能那个人只是懒惰打字,认为这更酷。实际上更酷的是,只需升级 PHP 并使用新的数组表示法。它也很短,它比首先需要解析器(这里用分隔符爆炸)的字符串携带更多信息:

explode("|", "value1|value2|value3");

array("value1", "value2", "value3");

["value1", "value2", "value3"];

如果你想知道你的同事有多认真:他在玩。玩是可以的,但如果他需要进行强力游戏以表明他可以将其作为一种风格压制到共享代码库中,那就打他的手指。那是愚蠢的。如果你需要一个数组,传递一个数组。

这不是我们说的正则表达式。这只是你的同事在代码库中引入问题的一些自嘲。仅仅因为某事是可能的,并不意味着它更好。

我想不出不发送字符串数组的理由。

好吧,我能想象到一些可能的原因:

  • 其他人只是想表明他们与您不同并且有能力说服项目中的其他所有人(社会问题)
  • 你不能接受你在团队中的地位太低,你甚至不能提出合理的论据来说服其他人,你跑到这里来抱怨,因为你希望你能找到更多的力量而不是响应升级@你的团队(社会问题)
  • 那家伙只是个混蛋,想要引入秘密的复杂性,以便只有他可以编辑和更改代码(职业管理,也可能是社会问题的标志)。

请不要把这些 cmets 看得太重 ;) 你问没关系,但没有太多答案,因为这闻起来很可疑,因为可能有一些原因表明这样的东西可能有用(尽管我对此表示怀疑,因为有了一些小的 OOP,这里的事情就开始变得非常不同了)。所以它总是取决于,但尽量保持你编辑的代码易于编辑并且不要添加太多魔法。可以将该字符串视为一个魔法数组。

【讨论】:

  • 实际上 hakre,我是推动他们走向 OOP 的人。原始应用程序是在一个特别的非 OOP 逐页基础上构建的。我确实促使开发人员在这里重新思考他的思维过程,但是很多代码都是一团糟,而且仍然一团糟。
【解决方案2】:

我会说没有足够的信息来 100% 准确地回答。在大多数情况下,答案是否定的。但这可能是一些特定的情况。

您从哪里以及从哪里传递数据?

有时您认为的数组实际上是(或曾经是)一个字符串,例如,如果“基础”层是 JSON 或 XML。 可能通过内爆/分解字符串来传递和解析数据更快——但同样,对此没有共同的答案,这取决于很多事情,例如数据的数量和结构.你应该尝试并测试它。或者提供更具体的信息:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多