2012-08-13 91 views
1

PHP得到這個數組做另一個數組:從一個陣列

$arr =('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 

我需要這個數組,但我有服務器:(

$newarray=('1-1.jpg','1-2.jpg','1-3.jpg', '1-4.jpg', '1-5.jpg'); 

在PHP 5.27版本忘記了服務器版本,則標準爲「1-」。如何獲得僅以「1-」開始的所有元素?

+2

這不是明顯的如何減少大陣列的小之一。什麼是標準? PS:「但是我的服務器上有PHP 5.27版本:(」--- --- 5.2.7有什麼特別錯誤? – zerkms 2012-08-13 20:48:44

+0

@zerkms這對我來說很明顯(我認爲5.2.7沒有'[...] ',你必須使用'array(...)'。) – 2012-08-13 20:49:34

+0

像zerkms一樣,你需要給我們提供比你給我們更多的信息。 – David 2012-08-13 20:49:41

回答

5

使用此代碼:

<?php 
$arr = array('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 
$newarray = array(); 
foreach($arr as $item) { 
    if(substr($item, 0, 2) == '1-') $newarray[] = $item; 
} 
sort($newarray); // Add this to sort the array 
?> 

您可以使用foreach之後的sort函數對數組進行排序。

+1

這不是每天頭兩個答案都有_exactly_相同的技巧:) – David 2012-08-13 20:54:57

+0

@David - 不,它不是' t ... – 2012-08-13 20:55:41

+0

「完全相同的技術」 - 使用substr獲取子字符串有什麼了不起?同樣的答案每天都會發生很多(對於這樣的小問題) – zerkms 2012-08-13 21:01:04

1
<?php 
$new_array = array(); 
foreach ($old_array as $line) { 
    if (substr($line, 0, 2) == "1-") { 
     $new_array[] = $line; 
    } 
} 
?> 

這將檢查每個元素的前兩個字符是否爲1-,如果是,則將其添加到新數組中。

+0

我打敗你了:-) – 2012-08-13 20:56:14

+0

好了。 :) – David 2012-08-13 20:56:39

+0

之後,我得到這個數組([0] => 2-1.jpg [1] => 3-1.jpg [2] => 4-1.jpg [3] => 5-1.jpg [4] => 6-1.jpg) – 2012-08-13 20:59:51

1

使用preg_grep

$arr = array('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 

print_r(preg_grep('#^1-#', $arr)); 

演示:http://codepad.org/ipDmYEBI

+0

我試圖學習正則表達式,但我無法弄清楚'#'符號的用途。 'preg_grep('/^1- /',$ arr)'不工作,沒有hashtags?謝謝!這似乎比通過子字符串更好。 – 2012-08-13 22:17:56

+0

@AlexKalicki,在PHP(也可能是perl)中指定正則表達式模式的方式,您可以使用[模式分隔符](http://php.net/manual/en/regexp.reference.delimiters.php)來分隔來自模式選項標誌的模式。一般來說,教正則表達式的資源並不多說這個,因爲它在各種編程語言中並不適用於所有正則表達式實現。但是,是的,它可以正確地使用'/'而不是'#'來工作,但是我習慣於使用'#',因爲'/'經常作爲模式中的一個亂七八糟的字符出現,然後你需要用一個反斜槓....然後它的醜陋閱讀。 – goat 2012-08-13 22:25:00

+0

啊,明白了。我知道在PHP中使用模式分隔符,但我不知道您使用的選項多於正斜槓。 :) – 2012-08-13 22:26:49

1

另一種方法是使用PHP的array_filter方法:

$arr = array('1-1.jpg','1-2.jpg','11-3.jpg', '1-4.jpg', '3-5.jpg', '41-5.jpg','1-3.jpg','4-5.jpg','14-5.jpg','54-5.jpg','64-5.jpg','14-5.jpg', '1-5.jpg'); 
$newArr = array_filter($arr, "filterArray"); // stores the filtered array 

function filterArray($value){ 
    return (substr($value, 0, 2) == "1-"); 
} 
+0

我剛剛發佈了另一個答案:-) – 2012-08-13 22:28:01