【发布时间】:2011-03-30 20:22:58
【问题描述】:
有没有办法在不使用变量的情况下获取拆分字符串的第 n 个元素?
我的 PHP 代码总是这样:
$foo = explode(" ", "bla ble bli");
echo $foo[0];
有没有像 Python 那样更短的方法?
print "bla ble bli".split(" ")[0]
提前致谢。
【问题讨论】:
有没有办法在不使用变量的情况下获取拆分字符串的第 n 个元素?
我的 PHP 代码总是这样:
$foo = explode(" ", "bla ble bli");
echo $foo[0];
有没有像 Python 那样更短的方法?
print "bla ble bli".split(" ")[0]
提前致谢。
【问题讨论】:
这是人们大多数时候应该使用的而不是explode:
$foo = strtok("bla ble bli", " ");
它会切断第一个字符串部分,直到第一个" "。
如果你放不下explode,那么在Python中最接近[0]的成语是:
$foo = current(explode(...));
如果它不只是第一个元素,那么它会变得有点麻烦:
$foo = current(array_slice(explode(...), 2)); // element [2]
【讨论】:
strtok,然后explode 和数组访问似乎更容易......
echo current(explode(' ', 'a b c'));。但仅适用于第一个。
[n],那就是更多的语法盐
(本身并不是一个真正的答案——其他人确实回答得很好)
这是 PHP 的下一版本之一应该具备的功能之一(可能是 PHP 5.4)。
有关更多信息,请参阅Features in PHP trunk: Array dereferencing -- 引用给定示例之一:
<?php
function foo() {
return array(1, 2, 3);
}
echo foo()[2]; // prints 3
?>
【讨论】:
试试这个:
一行:
<?php
echo (($f=explode(" ", "bla ble bli"))?$f[0]:'');
?>
这里的结果: http://codepad.org/tnhbpYdd
【讨论】:
为什么不直接做:
function splode($string, $delimiter, $index){
$r = explode($delimiter, $string);
return $r[$index];
}
我喜欢使用这样的小功能。
【讨论】:
我只能想到一种表达方式:
echo list($a) = explode(' ', 'a b c') ? $a : '';
echo list($_, $b) = explode(' ', 'a b c') ? $b : '';
【讨论】:
据我所知,虽然您可以定义一个函数并使用它。
function firstWord($string) {
$foo = explode(" ", $string);
return $string;
}
【讨论】:
我不知道有什么方法可以做你想做的事,尽管我以前多次想做同样的事情。对于这种特定情况,您可以这样做
$bar = substr($foo, 0, strpos($foo, " "));
这不再是一个额外的变量,但并不是你想要的。
【讨论】:
以下可能是我能想到的最干净的方式来做 OP 要求的事情。它定义了一个函数,但它没有自己的变量,它几乎可以在任何情况下完成工作:
function at(&$arr, &$pos) { return $arr[$pos]; }
示例用法:
echo at( explode('|', 'a|b|c|d'), 1 ); // Outputs 'b'
该函数是一行代码,不会很难提交到内存中。如果您只使用一次,您可以在本地范围内定义它,以尽量减少代码混乱。
作为一个额外的好处,因为该函数不对$arr 或$pos 进行检查,所以它会抛出与尝试访问不存在的数组索引时相同的错误,甚至会返回字符串中的单个字符或键值对数组中的项目。
【讨论】:
关闭。正确的做法是为重复的事物创建一个函数或方法。
function extract_word($input, $index) {
$input = explode(' ', $input);
return $input[$index];
}
如果您可能有不同的单词分隔符,请添加 $separater = ' ' 的第三个参数。
【讨论】: