【问题标题】:explode string into variables将字符串分解为变量
【发布时间】:2020-09-15 03:46:53
【问题描述】:

有没有办法将字符串分解为变量,例如

some_function($min, $max, "3, 20");

$min 被赋值为 3,$max 被赋值为 20。

我知道我可以简单地使用

$data = explode("3, 20");

只是想知道是否还有其他方法。

【问题讨论】:

    标签: php


    【解决方案1】:

    PHP 的语言构造list() 可以通过分配一个数组来对变量(甚至是其他数组键)进行多次赋值。

    list($min, $max) = explode(",", "3,20");
    

    但是,您仍然需要将 trim() 应用于您的变量,因为 $max 值将具有前导空格,或者将 explode() 替换为 preg_split('/\s*,\s*/', $string) 以将其拆分为逗号和周围的空格。

    注意:谨慎使用list(),以确保您分配的数组包含的元素数量与list() 的变量数量相同。

    PHP 5.x 中,当直接将值分配给另一个数组时,作为该数组的元素,list() 值在 PHP 5.x 中从右到左分配,而不是从左对。换句话说,您最终会得到向后填充的数组(最后一个值,第一个)。

    https://www.php.net/manual/en/migration70.incompatible.php

    PHP 7.x 中,当将元素直接分配给数组时,list() 参数是从左到右分配的。换句话说,你最终会得到第一个值作为接收者数组中的第一个元素。

    <?php
        list($a[], $a[], $a[]) = [1, 2, 3];
        var_dump($a);
    ?>
    

    PHP Manual

    PHP 5.X最后一个值获取第一个元素的位置,但是接收者必须是一个数组(本例中$a,就是数组)!

    array(3) {
      [0]=>
      int(3)
      [1]=>
      int(2)
      [2]=>
      int(1)
    }
    

    PHP 7.x 第一个值成为第一个数组元素。

    array(3) {
      [0]=>
      int(1)
      [1]=>
      int(2)
      [2]=>
      int(3)
    }
    

    PHP Manual

    【讨论】:

    • 技术上这是list()语言结构。但是 +1。
    • @DaveRandom 我没有说list() 是一个函数,我说这是函数 list()。微妙,但无论如何我会澄清:)
    • Thanx.....我会在list函数上阅读,至于注意,我会在explode函数上使用limit参数。我猜这是它的功能吧?
    • @kayfun 是的,这就是explode() 限制的目的。
    • 为什么不将分隔符设置为 ", " 并跳过整个 trim() 事情
    【解决方案2】:

    PHP 7.1 开始,有一个名为

    的新功能

    对称数组解构:现在可以使用简写数组语法 ([]) 用于解构分配的数组(包括在 foreach),作为现有 list() 语法的替代方案,即 仍然支持。

    这意味着你现在可以做:

    [$one, $two] = explode(";", "one;two");
    echo $one; // one
    echo $two; // two
    

    作为 list() 的替代方案,我发现它自己是一个非常优雅且易读的解决方案,随 7.1+ 提供......它是相同的,但更好。

    注意:正如引用所指出的,您可以使用简写数组语法 ([]) 在 foreach 声明中分配变量,但这与问题无关,请查看!

    文档:https://www.php.net/manual/en/migration71.new-features.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 2015-09-02
      • 2020-07-07
      • 2019-02-05
      • 1970-01-01
      相关资源
      最近更新 更多