【问题标题】:php removing item with period from arrayphp从数组中删除带有句点的项目
【发布时间】:2011-01-19 18:41:48
【问题描述】:

我有一个产品小部件数组。

一些小部件的名称中有保留的句点符号。

当php遇到句号时出现问题,其余的小部件名称被忽略。我怎样才能将小部件作为字符串文字读取,以便句号不会干扰?

unset($products[$widget]);
                  

我可以用占位符字母替换句点,这样它就不是保留字符,但我不想这样做。

【问题讨论】:

  • 你的意思是unset($products[$widget]);
  • 是的,抱歉打错了。
  • 我假设 $widget 看起来像这样 'some.widget.name'?
  • php 中没有“小部件”之类的东西,你的“小部件”到底是什么类型的值:数组、对象、字符串、整数、布尔值?
  • 小部件一词是指与php代码无关的虚构产品。因此产品的数组名称,每个键包含一个小部件的名称。该值是小部件的数量。

标签: php unset


【解决方案1】:

使用它们名称的规范化值作为键,使用真正的小部件名称作为值。

例子:

function slug($str)
{
    $str = strtolower(trim($str));
    $str = preg_replace('/[^a-z0-9-]/', '-', $str);
    $str = preg_replace('/-.+/', "-", $str);
    return $str;
}

$products[slug($widget)] = $widget;

【讨论】:

  • 这是一个有效的解决方法。我已经使用 value 字段来表示数量,但是是的,我可以制作一个二维数组。在寻找替代方案之前,我想知道问题是否可以通过某种方式将其读取为字符串文字来解决。感谢您的意见,每一点都有帮助!
【解决方案2】:

我做了一些错误的假设。小部件名称还包含我没有提及的井号符号,因为我不知道 # 符号会以它们的方式影响代码。

但事实证明,磅符号毕竟会导致问题,但在使用 unset 命令时不会。

我使用 $_GET[''] 通过 URL 传递了小部件的名称。显然,接收 get 不喜欢 # 符号并删除 # 符号之后的所有内容。

这里有一个简单的解释。 Soo……假设我传递了“crank#x.55”的小部件名称。 如果我回显 $_GET 变量,您会看到“crank”,而剩余的“#x.55”被剥离。

当我查看 url 时,它显示“crank#x.55”(完整的小部件名称),这让我相信它已正确发送到 $_GET var。当我执行 unset 时,我认为句点(连接)符号正在做一些奇怪的事情,这就是我创建原始问题的原因。 (我知道我需要为未来的问题提供更多事实)

我通过简单地用@ 符号替换英镑符号解决了这个问题,然后在发布数据后使用preg_replace 将@ 符号转换回英镑。与pixeline的答案类似,只是稍微适应了我的目的。

谢谢

【讨论】:

  • 请更新问题,以便其他搜索 SO 有类似问题的人可以找到此解决方案。
  • Stackoverflow 说不要改变原来的问题。最初的问题是我认为是错误的,最底层的答案是它是如何解决的。
猜你喜欢
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 2017-01-01
  • 2021-10-19
  • 2021-10-03
  • 2012-05-01
  • 2014-09-21
  • 2016-07-30
相关资源
最近更新 更多