2015-10-19 92 views
3

我有一個數組,我想從中刪除第一級索引並保留它的值。
是否有可能沒有循環?從數組中刪除第一級索引php

輸入數組:

Array (
    [0] => Array(
      [2135] => Array(
         [id] => 2135 
         [first_name] => John 
         [last_name] => Doe 
         ) 
      ), 
    [1] => Array (
      [3245] => Array(
         [id] => 3245 
         [first_name] => Sally 
         [last_name] => Smith 
         ) 
      ) 
) 

預期輸出:

Array (
    [2135] => Array(
       [id] => 2135 
       [first_name] => John 
       [last_name] => Doe 
       ), 


    [3245] => Array(
       [id] => 3245 
       [first_name] => Sally 
       [last_name] => Smith 
       ) 
) 
+0

離不開循環 –

+0

其實是可以的,但不明確給開發人員來完成。你可以使用'Iterator'。你會發現更多的細節[這個答案](http://stackoverflow.com/questions/13920659/php-remove-parent-level-array-from-set-of-arrays-and-merge-nodes),其中這就是爲什麼我不回答。它是重複的。 –

+0

@AlanMachado'iterator_to_array'在 –

回答

1

試試這個

$a = array (
    array(
     '2135' => array(
      'id' => 2135, 
      'first_name' => 'John', 
      'last_name' => 'Doe' 
     ) 
    ), 
    array (
     '3245' => array(
      'id' => 3245, 
      'first_name' => 'Sally', 
      'last_name' => 'Smith', 
     ) 
    ) 
); 
$reduce = function ($new = array(), $x) { 
    $new[array_keys($x)[0]]=array_values($x)[0]; 
    return $new; 
}; 

$output = array_reduce($a, $reduce); 

// var_dump($output); 
+0

請不要讓OP「解釋」它的工作原理。您的答案可以閱讀給其他搜索幫助和閱讀此問題的用戶,他們可能無法理解您的解決方案爲何適合您。 –

+0

我認爲這很明顯,它是如何工作的。它使用'array_reduce',它執行OP想要的內容,而不使用循環(除非你計算'array_reduce'中隱含的循環)。我認爲''array_filter'的答案也有點可取,因爲它不需要一個新的全局變量。 –

+0

爲什麼你這麼沮喪?我沒有告訴你的答案是錯誤的,也不應該代表我的代理撤回它,我只是建議(*禮貌地*)提供一些關於你的代碼的簡單解釋。這只是社區實踐。 –

1

短(評論)答案:

<?php 
// simulate array 
$arr = [['2135' => ['id' => 2135,'first_name' => 'John','last_name' => 'Doe']], 
     ['3245' => ['id' => 3245,'first_name' => 'Sally','last_name' => 'Smith']]]; 

// new indexed array 
$newArr = []; 

array_filter($arr, function($val) {  // array_filter checks if are arrays, 
    global $newArr;      // then use its index as key to its val. 
    return !is_array($val) ?: $newArr[key($val)] = $val[key($val)]; 
    }); 

echo '<pre>'; 
print_r($newArr); 

// You could respect your data struct and use 'id' field to name keys as well. 

輸出:

Array 
(
    [2135] => Array 
     (
      [id] => 2135 
      [first_name] => John 
      [last_name] => Doe 
     ) 

    [3245] => Array 
     (
      [id] => 3245 
      [first_name] => Sally 
      [last_name] => Smith 
     ) 

)