【问题标题】:Split variable using php使用php拆分变量
【发布时间】:2014-10-28 08:12:03
【问题描述】:

我正在使用jquery 获取名称属性,并通过ajax 调用将其传递给我的控制器。

查看

<?php 
    $data = array(
    'name' => $id.$country,
    'class' => 'send',
    'content' => 'Send'
    );
   echo form_button($data);
   ?> 

JS

var abc = $(self).attr("name");

我想知道是否有任何 codeigniter php 函数可以帮助我将 id 与国家/地区分开并将它们传递给我的模型。

控制器

$abc = $this->input->post('abc');

$id = first part of abc variable
$country = second part of abc variable

【问题讨论】:

  • 首先连接 2 个条目是个坏主意。
  • 单独传递它们或使用 id 和国家 不得包含任何条件的连接字符串/字符。我会单独发送。
  • $id每次固定长度吗?
  • @EducateYourself 仅包含您的身份证号码?

标签: php jquery codeigniter


【解决方案1】:

免责声明:

正如@Jonast92 在 cmets 中澄清的那样,这个答案并不能解决解决方案,我在重新查看问题后同意,因为这些值实际上不包含点并且不是1.usa 的形式,但是而是1usa

注意:我将在下面留下最初的答案以供参考,但这仅适用于字符由 (.) 字符分隔且不直接连接的情况。


半无效答案:

IF 使用. 作为分隔符连接字符串,如下所示: '名称' => $id 。 “。” . $国家/地区,

您可以使用 explode 将该字符串连接到一个数组中:

$abc = explode(".",$abc);

那么 id 将存储在索引 0 和国家/地区索引 1:

$id = $abc[0];
$country = $abc[1];

只需确保值不包含任何点 (.) 字符,因为这会产生不需要的结果。

注意:您甚至可以使用以下方法限制数组元素的数量:

$abc = explode(".",$abc,2);

这将允许国家/地区仍然包含一个点,而不会将它们进一步分解成一个数组。

最佳解决方案不过是拆分这两个值并将它们作为单独的参数传递,然后再将它们发布到 php 页面,并且仅在其他地方的应用程序需要时将它们连接起来。

【讨论】:

  • $abc 不包含. (据我们所知,所以我们不能被它爆炸),他只是将变量$id$country 与连接关键字@ 连接起来PHP中的987654336@,与.作为字符串的一部分无关。
  • @Kypros 如果您添加一行'name' =&gt; $id.".".$country,,它可能是一个有效的答案尽管我不建议 concat 如我之前的评论中提到的那样
  • @EducateYourself 这很不确定而且有风险。它依赖于永远不会改变的数据和实现,而你不能总是保证。
  • @EducateYourself 因为它会让你的生活(可能还有其他人)更轻松(无需连接然后再次拆分),每个参数都可以有它自己的类型(integer,string 在你的case) 并且您可以单独使用/验证它们,即isset($_POST['country']){ }
  • 同样的事情,如果我禁用了javascript 怎么办?您的代码逻辑很可能会中断。您需要连接它们的任何特殊原因?除了在某些情况下进行演示之外,我似乎找不到这样做的任何真正好处
【解决方案2】:

你能试试这个吗:

$str = $this->input->post('abc');
preg_match_all('!\d+!', $str, $matches);
print_r($matches);

示例:

$str = '1654usa';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);

要回显号码,请使用:echo $matches[0][0];

这将返回 1654,因为正则表达式在字符串中搜索数字,并将“拉出”所有数字。

【讨论】:

  • 您能否向 OP 详细说明它应该做什么以及如何做?
  • @Jonast92 检查更新的答案,这是你的意思吗?
【解决方案3】:

如果 id 只包含数字,这应该对你有用!

<?php 

    $str = '234534534Virgin Islands (U.S.)';
    preg_match_all('!\d+!', $str, $matches);
    $id = $matches[0][0];
    preg_match_all('/((?!\d+).)*$/', $str, $matches);
    $country = $matches[0][0];

    echo $id . "<br />" . $country;

?>

输出:

234534534
Virgin Islands (U.S.)

【讨论】:

  • 如果我住在Guinea-Bissau Falkland Islands (Malvinas) Virgin Islands (U.S.) 等会失败 例如
  • @karanthakkar 感谢我的通知!我修好了它!你所有的例子现在都可以工作了!
  • 不确定否决的选民,但不错的更新!也更新输出:P 现在不能是Switzerland。 jk,干杯;)
  • 我没有说它不适用于瑞士,我只是说在您的代码(维尔京群岛(美国))和 op(瑞士)中有 对比。您在后记中更正了;)
  • 已经完成,但我不想像你在整个问题中看到的所有 cmets 那样连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2013-08-09
  • 2019-07-09
  • 2011-09-02
  • 1970-01-01
相关资源
最近更新 更多