2016-02-29 23 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); 

这肯定会工作。

相关问题