2016-02-29 35 views
1

我有以下陣列將內部數組轉換爲外部數組的索引而不使用PHP中的foreach?

Array 
(
    [0] => Array 
     (
      [id] => 1120 
     ) 

    [1] => Array 
     (
      [id] => 1127 
     ) 

    [2] => Array 
     (
      [id] => 16101 
     ) 

    [3] => Array 
     (
      [id] => 16441 
     ) 

    [4] => Array 
     (
      [id] => 18447 
     ) 
) 

我想上面的數組轉換成這種形式:

Array 
    (
     [0] => 1120 

     [1] => 1127 

     [2] => 16101 

     [3] => 16441 

     [4] => 18447 
    ) 

,但條件是這是一定要做不使用的foreach。這可能嗎?

+1

但爲什麼你不想使用foreach函數。問題是什麼? foreach函數適用於這種類型的場景 –

+0

永無止境的數組列答案 – Ghost

+0

@Rajender因爲在我的情況下有數千個條目,並且如果我使用foreach或任何其他循環,那麼它會減慢服務器的速度。 –

回答

4

解決方案PHP> = 5.5 - array_column功能:

// assuming $arr is your initial array 
$result = array_column($arr, 'id'); 

var_dump($result); 
// the output: 
Array 
    (
     [0] => 1120 

     [1] => 1127 

     [2] => 16101 

     [3] => 16441 

     [4] => 18447 
    ) 

http://php.net/manual/en/function.array-column.php

+0

帽子關!男人,非常感謝你,所以總是節省我的時間:) –

+0

不客氣! ) – RomanPerekhrest

0

可以使用array_column功能

$final_array = array_column($your_array, "id"); 
0

您可以使用array_column做到這一點做到這一點。

var_dump(array_column([['id' => 1],['id'=>2]], 'id')); 

/* 
gives you.. 

array(2) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
} 
*/ 
0
array_combine(array_keys($arr), array_map(function($item) { return $item['id']; }, $arr)); 
+2

使用火箭筒殺死蚊子:) – bansi

0

>=4.0.6,你可以簡單地使用array_map等作爲

$arr = array(array('id' => 1),array('id' => 2),array('id' => 3)); 
function call_function($v){ 
    return $v['id']; 
} 
$result = array_map('call_function',$arr); 
print_r($result); 

相反,你可以簡單地使用reset功能@Ghost PHP版本說,像作爲

$arr = array(array('id' => 1),array('id' => 2),array('id' => 3)); 
$result = array_map('reset',$arr); 
print_r($result); 

輸出

Array 
(
    [0] => 1 
    [1] => 2 
    [2] => 3 
) 

Demo

+1

或只是簡單的'$ result = array_map('reset',$ arr)' – Ghost

+0

是的,你是對的@Ghost我已經更新了我的回答 –

+0

Downvoters發佈downvoting的原因。所以我可以改善我的回答 –

0
$arrFirstArray = array(
    '0' => array(
     'id' => 1120 
    ), 
    '1' => array(
     'id' => 1127 
    ), 
    '2' => array(
     'id' => 16101 
    ), 
    '3' => array(
     'id' => 16441 
    ), 
    '4' => array(
     'id' => 18447 
     )); 

echo $intFirstArray = count($arrFirstArray); 

$arrSecondArray = array(); 
for ($intI = 0; $intI < $intFirstArray; $intI++) 
{ 
    global $arrSecondArray; 
    $arrSecondArray[] = $arrFirstArray[$intI]['id']; 
} 
echo '<pre>'; 
print_r($arrSecondArray); 

這肯定會工作。

相關問題