2013-04-05 29 views
2

我只是想知道是否可以從PHP中的數組中提取值,而不必循環。這是我的陣列的一部分,所以你知道我的意思;從不帶循環的多維數組提取值

Array 
(
[0] => Array 
    (
     [0] => 76 
     [1] => Adventures of Huckleberry Finn 
    ) 

[1] => Array 
    (
     [0] => 65 
     [1] => Adventures of Huckleberry Finn 
    ) 

[2] => Array 
    (
     [0] => 59 
     [1] => Bookcases 
    ) 
) 

從每個陣列的整數[0]後,我 - 有,可以做到這比foreach循環(I通常這樣做的方法)更快的函數?

謝謝。

+0

你想提取所有數據嗎?或細節。 – 2013-04-05 22:59:09

+0

我需要一個只有數字的數組,所以array(76,65,59) – Dan 2013-04-05 23:01:30

回答

0

你最終意味着array_walk ...但這也是某種循環?那麼:答案是否定的。

而且我不認爲有任何更快的方法(除了C編寫:-P自己的分機)

+0

我只是在看array_walk現在。我期望的輸出是數組(76,65,59) - array_walk會這樣做嗎? – Dan 2013-04-05 23:05:14

+0

看到這個答案:http://stackoverflow.com/questions/15844965/php-extract-values-from-multidimensional-array-without-a-loop/#answer-15845034;) – bwoebi 2013-04-05 23:07:52

0

嘗試:

array_walk($array, function(&$v) { $v = $v[0]; }); 

這應該數組轉換成格式你要。

+0

什麼是最後一樣的: 'foreach($ array as&$ v)$ v = $ v [0];' – bwoebi 2013-04-05 23:09:32

+0

當然,他要求一種沒有違法的方法。 'array_walk'的優點是'$ v'不會污染名字空間。 – 2013-04-05 23:14:08

1

你可能會尋找array_walk()

$newArray = array(); 
$myCallback = function($key) use(&$newArray){ 
    $newArray[] = $key[0]; 
}; 

array_walk($myArray, $myCallback); 

,如果你有你的陣列上方變量$ myarray的

+0

我剛剛測試過這個,它完美的設置了'$ newArray'和你需要的值。 – 2013-04-05 23:36:11

0

去一個明確的循環這將是當然的,你的同胞程序員會感謝您。與其他任何解決方案相比,它的速度可能要快得多,並且清晰的代碼優於隱藏的循環避免。

只是作爲說明:多少秒它會帶你看什麼:

list($b) = call_user_func_array('array_map',array_merge(array(null),$a)); 

...呢?

是否有竅門。不要使用它。

1

確定您正在尋找array_column功能。

$newArray = array_column($originalArray,'0'); 

正如在PHP手冊中所說的,使用此函數,您可以從數組數組中提取所需的唯一信息。它通常與關聯數組一起使用,但可以使用數字作爲參數,並且它也可以工作。