PHP字符串分割函数explode和数组有什么区别?

5

在需要使用数组的情况下,是否有理由使用字符串?

我有一个开发人员希望传递一个分隔字符串,在数据库类方法中将其分解以从2个不同的字符串中提取多个字段/值对。我想不到不发送字符串数组的理由。

例子:

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

vs数组

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

我知道想法是传递一个未知数量的键/值对,但我认为将其分解成字符串并不是答案。但是我可能错了。


什么是字符串数组?字符串和数组是非常不同的数据类型。 - Mike Mackintosh
开发者希望传递多个字符串值以供在SQL查询中使用。 - Desirea Herrera
只要数组版本可用,我会使用它!另一种变体可能仅在明确需要字符串的情况下有用。 - Niko
这是应用程序上下文中的新架构。我个人的感觉是尽可能使用数组,而不是创建必须被拆分的字符串。 - Desirea Herrera
2个回答

3

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

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

但正如它已经显示的那样,这只是额外的开销,而不是必要的。可能那个人只是懒得打字,认为这更酷。真正更酷的是,升级PHP并使用新的数组表示法。它也很简短,并且比需要解析器(例如使用分隔字符的explode函数)的字符串携带更多信息:

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

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

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

如果你想知道你的同事有多认真:他在玩。玩耍是可以的,但如果他需要用权力游戏来展示他可以压制共享代码库中的风格,那就打他的手指。那很愚蠢。如果你需要一个数组,就传递一个数组。
这不像正则表达式那样。这只是你的同事自嘲地将问题引入到代码库中。仅仅因为某些事情是可能的,并不意味着它更好。
“我想不出不发送字符串数组的理由。”
嗯,我能想象一些可能的原因:
- 其他人只是想展示他们与你不同的知识,并且有说服项目中每个人的力量(社交问题)。 - 你不能接受你在团队中的地位太低,甚至不能提出合理的论点来说服其他人,所以你跑到这里抱怨,因为你希望你能得到更多的力量而不是逐步升级你的团队(社交问题)。 - 那个家伙只是个混蛋,想引入秘密复杂性,这样只有他才能编辑和更改代码(职业管理,也可能是社交问题的迹象)。
请不要太认真对待这些评论 ;)问问没关系,但没有太多的答案,因为这闻起来有点可疑,因为可能有一些理由使得这样的东西很有用(尽管我对此表示怀疑,因为用一些小的OOP事情开始看起来真的很不同)。所以这总是取决于具体情况,但尽量保持你编辑的代码简单易懂,不要添加太多魔法。你可以把那个字符串看作是一个神奇的数组。

实际上,hakre,是我推动他们转向面向对象编程的。原始应用程序是基于临时非面向对象的逐页构建的。我确实促使开发人员重新思考他的思维过程,但很多代码仍然很混乱。 - Desirea Herrera

0

我认为这不足以提供100%准确的答案。在大多数情况下,答案是否定的。但这可能是某些特殊情况。

你从哪里到哪里传递数据?

有时候你认为是数组的东西(或曾经是),实际上是一个字符串,例如,如果“底层”是JSON或XML。并且通过将字符串implode/explode来传递和解析数据可能会更快 - 但同样,这没有通用的答案,它取决于许多因素,例如数据的数量和结构。你应该尝试并测试它。或者提供更具体的信息 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接