2011-05-20 87 views
0

我想改变数组的值而不LOOP-改变阵列

实施例的代码值:

<?php 
    //current array 
    $ids = array('1113_1', '1156_6', '1342_16', '1132_3', '1165_2'); 

    //result should be looks like this 
    $ids = array('1113', '1156', '1342', '1132', '1165'); 
?> 

是有可能做到这一点而没有任何循环?

+0

您的问题可以改进。你能解释为什么你想避免循环,以及你的数据是动态的还是静态的? – 2011-05-20 19:32:33

+2

我见过一些关于“这仍然是一个循环”的评论 - 你应该知道,你不能以一种非动态的方式处理某个底层的循环。 – Nicole 2011-05-20 21:47:32

回答

2

试试这个使用array_map()

<?php 
function remove_end($n) 
{ 
    list($front) = explode("_", $n); 
    return $front; 
} 

$a = array('1113_1', '1156_6', '1342_16', '1132_3', '1165_2'); 
$a = array_map("remove_end", $a); 
print_r($a); 
?> 

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

+0

来自PHP手册:“在将回调函数应用于每个元素之后,返回包含arr1所有元素的数组。”循环仍在发生,但它封装在array_map()调用中。 – 2011-05-20 19:18:01

+0

@George,neever说没有在后面的循环,但它绝对是一个更短的电话 – Neal 2011-05-20 19:19:26

+0

@Neal:OP说:“我想改变一个数组的值没有循环” – 2011-05-20 19:20:00

1

可能吗?是:

$ids[0] = substr($ids[0], 0, -2); 
$ids[1] = substr($ids[1], 0, -2); 
$ids[2] = substr($ids[2], 0, -3); 
$ids[3] = substr($ids[3], 0, -2); 
$ids[4] = substr($ids[4], 0, -2); 

但是,为什么你要避免这种情况下,使用一个循环?

+0

然后,你将需要一个循环在某个时刻。如果你的数据是动态的,你需要对每个元素采取行动,而循环就是这样做的方式。 – 2011-05-20 19:21:00

+0

@Vural Acar:在网上与他人进行对话相当粗鲁,然后在没有任何警告的情况下删除您的评论。 – 2011-05-25 22:56:05

1

array_map(),但内部它仍然使用循环。

function $mycallback($a) { 
    ... process $a 
    return $fixed_value; 
} 

$fixed_array = array_map('mycallback', $bad_array); 
+0

:-)好主意成对出现 – Neal 2011-05-20 19:19:41

+0

这仍然是递归循环,不过谢谢! – Racooon 2011-05-20 19:25:30

+0

如果你事先不知道有多少项目会有,所以你可以写出每个搜索/单独替换,循环是你唯一的选择。为什么你想避免循环? – 2011-05-20 19:26:21

3

代替所示串/数组函数解决方法,也可以只使用内置了PHP过滤数组:

$ids = array('1113_1', '1156_6', '1342_16', '1132_3', '1165_2'); 
$ids = array_map("intval", $ids); 

此将每个进入的整数,这足以在这种情况下得到:

Array 
(
    [0] => 1113 
    [1] => 1156 
    [2] => 1342 
    [3] => 1132 
    [4] => 1165 
) 
+2

这是一个**内置** PHP函数。请遏制'大声笑'。这里不是论坛。 – mario 2011-05-20 19:27:09