我怎样才能得到下面的代码工作?PHP爆炸和数组索引
$ a = explode('s',$ str)[0];
我只看到的解决方案看起来像这样:
$ A =爆炸( 'S',$海峡); $ a = $一个[0];
我怎样才能得到下面的代码工作?PHP爆炸和数组索引
$ a = explode('s',$ str)[0];
我只看到的解决方案看起来像这样:
$ A =爆炸( 'S',$海峡); $ a = $一个[0];
正如其他人所说,PHP是不同的JavaScript的,因为它不能访问从函数返回数组元素。 您列出的第二种方法工作。您也可以与current()
,reset()
,或array_pop()
功能抢数组的第一个元素,像这样:
$a = current(explode('s', $str)); //or
$a = reset(explode('s', $str)); //or
$a = array_pop (explode('s', $str));
如果你想删除爆炸可能会导致由于多次分离少量的开销,你可以设置通过在其他论点之后传递2来限制到2。你也可以考虑使用str_pos和strstr代替:
$a = substr($str, 0, strpos($str, 's'));
任何这些选择都可以。
编辑另一种方法是使用list()
(见PHP doc)。有了它,你可以抓住任何元素:
list($first) = explode('s', $str); //First
list(,$second) = explode('s', $str); //Second
list(,,$third) = explode('s', $str); //Third
//etc.
那不是你的风格?你总是可以编写一个小的辅助函数来抓住从返回数组的功能要素:
function array_grab($arr, $key) { return($arr[$key]); }
$part = array_grab(explode('s', $str), 0); //Usage: 1st element, etc.
编辑: PHP 5.4将支持数组语法,所以你将能够做到:
$first_element = explode(',','A,B,C')[0];
你对你的第二个代码块是正确的。 explode
和其他函数不能返回一个完全形成的数组立即使用,所以你必须设置一个临时变量。在开发树中可能有代码可以做到这一点,但获取现在需要的元素的唯一方法是临时变量。
这很不幸是正确的,并说了很多关于如何设计语言:-( – 2011-01-09 13:37:10
你可以使用这个:
$a = array_shift(array_slice(explode("s", $str), 0, 1)));
这是我发现从爆炸数组中获取特定元素的最佳方法。
击穿:
Explode
返回的分隔符的数组array_slice($arrayname, $offset, $length)
为您提供了从偏移所有项目新阵列,lenghtarray_shift($array)
给你的第一个(在这种情况下,只有)数组传递给它。这doesen't看起来很漂亮,但不一样的:
$a = explode('s', $str)[0];
必须有一个更好的方式来做到这一点,但我还没有找到它。
更新: 我研究这个,因为我想提取URL的一部分,所以我做了以下测试:
function urlsplitTest()
{
$url = 'control_panel/deliveryaddress/188/edit/';
$passes = 1000000;
Timer::reset();
Timer::start();
$x =0;
while ($x<$passes) {
$res = array_shift(array_slice(explode("/", $url), 2, 1));
$x++;
}
Timer::stop();
$time = Timer::get();
echo $res.'<br />Time used on: array_shift(array_slice(explode("/", $url), 2, 1)):'.$time;
Timer::reset();
Timer::start();
$x =0;
while ($x<$passes) {
$res = array_get(explode("/", $url), 2);
$x++;
}
Timer::stop();
$time = Timer::get();
echo $res.'<br />Time used on: array_get(explode("/", $url), 2): '.$time;
Timer::reset();
Timer::start();
$x =0;
while ($x<$passes) {
$res = substr($url, 30, -6);
$x++;
}
Timer::stop();
$time = Timer::get();
echo $res.'<br />Time used on: substr($url, 30, -6): '.$time;
}
function array_get($array, $pos) {return $array[$pos];}
的结果如下:
Time used on: array_shift(array_slice(explode("/", $url), 2, 1)):7.897379
Time used on: array_get(explode("/", $url), 2): 2.979483
Time used on: substr($url, 30, -6): 0.932806
在我的情况下,我想从网址获得数字188,并且网址的所有其余部分都是静态的,所以我最终使用substr方法,但对于lenth可能更改的动态版本,上面的array_get方法是紧固件和最干净。
,但它一切工作,如果我需要第一个元素,而不是第二个 – kusanagi 2011-01-10 09:00:28