我怎樣才能得到下面的代碼工作?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