2012-02-28 46 views
5

我認爲這已經過去了,但無法找到任何答案。如果已經解答,請通過鏈接指向正確的方向。刪除陣列中的第一級標識符

我有一個數組,我不想刪除第一級標識符。我認爲這有一個功能?它是如何

例子:

[0] => Array 
     (
      [8] => Röd 
     ) 

[1] => Array 
     (
      [8] => Blå 
     ) 

[2] => Array 
     (
      [6] => Bobo 
     ) 

[3] => Array 
     (
      [8] => Grön 
     ) 

[4] => Array 
     (
      [7] => Sten 
     ) 

[5] => Array 
     (
      [8] => Vit 
     ) 

[6] => Array 
     (
      [7] => Guld 
     ) 

[7] => Array 
     (
      [6] => Lyxig 
     ) 

我wan't

[8] => Röd 
[8] => Blå 
[6] => Bobo 
[8] => Grön 
[7] => Sten 
[8] => Vit 
[7] => Guld 
[6] => Lyxig 
+0

我覺得這些都是你要找的機器人:http://stackoverflow.com/questions/1181691/extract-leaf-nodes-of-多維陣列在PHP – Quasdunk 2012-02-28 12:41:31

+0

你最終得到重複的鍵...可以「重新編號」的鍵(1,2,3,...?) – 2012-02-28 12:45:22

+0

檢查我的答案,將刪除第一級標識符數組,並會給你確切的結果 – 2012-02-28 12:54:41

回答

0
foreach($array as $key=>$val) { 
    $newarr[$val] = $array[$key][$val]; 
} 

未經測試!

+2

應該補充說,公開密鑰當然是不可能的,並且會被覆蓋。 – Sgoettschkes 2012-02-28 12:48:11

12

這裏的問題是保留你想要的標識符的關鍵。你有一些具有相同密鑰的名稱字符串(如Blå和Röd)。你可能需要將它們存儲在數組中或願意丟失密鑰。

例如用PHP5.3:

$processed = array_map(function($a) { return array_pop($a); }, $arr); 

這會給你:

[0] => Röd 
[1] => Blå 
[2] => Bobo 
[3] => Grön 
[4] => Sten 
[5] => Vit 
[6] => Guld 
[7] => Lyxig 

它已成爲明確的內陣列上的按鍵需要保留,因爲它們是某種形式的id 。有了這個說法,你必須改變你要做的最終結構,因爲你可以在同一個數組中擁有2個相同的鍵。最簡單的結構就變成了:

[8] => Array 
     (
      [0] => Röd, 
      [1] => Blå, 
      [2] => Vit, 
      [3] => Grön 
     ) 

[6] => Array 
     (
      [0] => Bobo, 
      [1] => Lyxig 
     ) 

[7] => Array 
     (
      [0] => Sten, 
      [1] => Guld 
     ) 

爲了得到這個結構的簡單循環將工作:

$processed = array(); 
foreach($arr as $subarr) { 
    foreach($subarr as $id => $value) { 
     if(!isset($processed[$id])) { 
     $processed[$id] = array(); 
     } 

     $processed[$id][] = $value; 
    } 
} 
+0

好的解決方案和很好的魚子醬斑點 – Luc 2012-02-28 12:54:15

+0

這看起來像一個非常整潔的解決方案。但不能讓它工作。在$ arr中輸入數組。獲取以下消息:array_map()期望參數1是有效的回調,第一個數組成員不是有效的類名稱或對象。我有以下代碼'<?PHP的 $ arrData =陣列( 「5」=>數組 ( 「8」=> 「維生素」 ) 「6」=>數組 ( 「7」 =>「Guld」 ) ); $處理= array_map($ arrData, \t函數($ A) \t { \t \t返回array_pop($ a)的 \t}); print_r($ processed); ?>' – Fredrik 2012-02-29 23:06:22

+0

對不起翻轉:-)更新我的答案。 – prodigitalson 2012-02-29 23:07:36

0

檢查了這一點,這是我們所期望的結果

<?php 
$arrData = array(
"5" => array 
     (
      "8" => "Vit" 
     ), 

"6" => array 
     (
      "7" => "Guld" 
     ) 
); 
foreach($arrData as $key=>$value): 
    foreach($value as $k=>$v): 
    $data[$k] = implode(',',$arrData[$key]); 
    endforeach; 
endforeach; 


print_r($data); 
?> 
1

使用:

public function remove_level($array) { 
     $result = array(); 
     foreach ($array as $key => $value) { 
     if (is_array($value)) { 
      $result = array_merge($result, $value); 
     } 
     } 
     return $result; 
} 

它將以原始數組的相同順序返回二級數組值。 或者您可以使用array_walk

$results = array(); 
    array_walk($array, function($v, $k) use($key, &$val){ 
       array_merge($results, $v); 
    }); 
3

PHP array_column

$new_array = array_column($old_array,0); 

這將檢索索引0內$ old_array每個數組的值。也可以與關聯數組一起使用。

0

嘗試與圖示運營商合併數組:

print_r(array_merge(...$array)); 
+0

請添加一個關於建議答案如何解決問題的描述。 – Billa 2017-12-11 13:40:23