2011-05-20 61 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