2012-08-13 99 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