【问题标题】:Call-time pass-by-reference error, Unable to fix the code调用时传递引用错误,无法修复代码
【发布时间】:2014-03-08 01:16:08
【问题描述】:

自从我更新到 php 5.4 后,我收到错误 Call-time pass-by-reference has been removed,正如我所读,删除 & 应该可以解决它。确实如此,但现在我的代码不再工作了。

我需要从字符串 raw400 中创建一个关联数组,键为 t 和 f 加上数字(例如 t410 和 f410),并且值必须是 - 之后的值,没有 -

例子:

t410-1:06,f410-15.4

应该变成:

key: t410
value: 1:06

key: f410
value 15.4

代码..

$raw400 = 't410-1:06,f410-15.4,t390-1:06,f390-15.6,t370-1:05,f370-16.0,t350-1:05,f350-16.2,t330-1:04,f330-16.3,t310-1:00,f310-16.7';

$array = explode(',',$raw400);
$nm400 = array();
array_walk($array,'walk', $nm400);
function walk($val, $key, $nm400){
$nums = explode('-',$val);
$nm400[$nums[0]] = $nums[1];
}

非常感谢您的帮助,谢谢。

【问题讨论】:

    标签: php arrays function error-handling associative-array


    【解决方案1】:

    只需使用parse_str() 这个技巧。

    <?php
    $raw400 = 't410-1:06,f410-15.4,t390-1:06,f390-15.6,t370-1:05,f370-16.0,t350-1:05,f350-16.2,t330-1:04,f330-16.3,t310-1:00,f310-16.7';
    parse_str(str_replace(array('-',','),array('=','&'),$raw400),$arr);
    print_r($arr);
    

    OUTPUT :

    Array
    (
        [t410] => 1:06
        [f410] => 15.4
        [t390] => 1:06
        [f390] => 15.6
        [t370] => 1:05
        [f370] => 16.0
        [t350] => 1:05
        [f350] => 16.2
        [t330] => 1:04
        [f330] => 16.3
        [t310] => 1:00
        [f310] => 16.7
    )
    

    Demo

    【讨论】:

      【解决方案2】:

      使用preg_match_all()array_combine

      <?php
      $raw400 = 't410-1:06,f410-15.4,t390-1:06,f390-15.6,t370-1:05,f370-16.0,t350-1:05,f350-16.2,t330-1:04,f330-16.3,t310-1:00,f310-16.7';
      preg_match_all("/([^-, ]+)\,([^-,]+)/", $raw400, $res);
      $array = array_combine($res[2], $res[1]);
      print_r($array);
      

      输出:

       Array
      (
          [f410] => 1:06
          [t390] => 15.4
          [f390] => 1:06
          [t370] => 15.6
          [f370] => 1:05
          [t350] => 16.0
          [f350] => 1:05
          [t330] => 16.2
          [f330] => 1:04
          [t310] => 16.3
          [f310] => 1:00
      )
      

      【讨论】:

        猜你喜欢
        • 2013-12-06
        • 1970-01-01
        • 2012-05-22
        • 2019-11-15
        • 1970-01-01
        • 1970-01-01
        • 2021-09-26
        • 2011-12-11
        • 2022-12-15
        相关资源
        最近更新 更多