2016-02-05 19 views
1

我有一個3維數組,我試圖放下數組的基本鍵,以便僅顯示2個更高的鍵/值對。在php數組中放置一個圖層並放置字段也是

同時有2個字段,我試圖刪除,但代碼:unset($ TestArray ['Total']); unset($ TestArray ['Count_all']); 沒有工作。

Qu 1)如何從數組中刪除「Total」和「Count_all」字段?

曲2)如何將圖1中的數組減少到圖2中的數組? (最好使數組在新的基本級別而不是關聯)。圖2正是我試圖讓原始數組看起來像。

對不起,如果我的措辭不能很好地描述我正在嘗試做什麼。

圖1

Array 
(
    [86] => Array 
     (
      [134] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 36.00 
       ) 

      [130] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 28.00 
       ) 

      [135] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 125.00 
       ) 

      [131] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 67.00 
       ) 

      [133] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 368.80 
       ) 

      [Total] => 624.8 
      [Count_all] => 5 
     ) 

    [67] => Array 
     (
      [130] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 67 
        [Total_Amount] => 129.58 
       ) 

      [131] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 67 
        [Total_Amount] => 230.25 
       ) 

      [133] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 67 
        [Total_Amount] => 76.20 
       ) 

      [132] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 67 
        [Total_Amount] => 436.03 
       ) 

      [Total] => 872.06 
      [Count_all] => 4 
     ) 

    [87] => Array 
     (
      [132] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 87 
        [Total_Amount] => 106.5 

圖2

Array 
(
    [0] => Array 
     (
      [User_ID] => 8 
      [Item_ID] => 86 
      [Total_Amount] => 36.00 
     ) 

    [1] => Array 
     (
      [User_ID] => 8 
      [[Item_ID] => 86 
      [Total_Amount] => 28.00 
     ) 
    [2] => Array 

+0

請有人編輯此。圖1和圖2中陣列的頂部未顯示。 – jeebee

+0

你是什麼意思由Blockquote? –

回答

1

簡單循環throught您的陣列:)

<?php 
$array_input; 
$array_output = array(); 
$blackListKeys = array("Total", "Count_all"); 

foreach ($array_input as $array_input1) { 
    foreach ($array_input1 as $key => $value) { 
     if (in_array($key, $blackListKeys)) continue; 
     else        $array_output[] = $value; 
    } 
} 
+0

非常感謝@Halayem。 2件事會使這個完美: 1)2個不需要的領域搞亂了事情,因爲他們出現在陣列中作爲項目5和6. [5] => 624。8 [6] => 5 – jeebee

+0

超出編輯時間。你知道我怎樣才能刪除兩個不需要的字段,因爲它們搞亂了數組 - 參見下面的項目5和6? [5] => 624.8 [6] => 5 – jeebee

+0

現貨和完美@Halayem!謝謝!!! – jeebee

1

unset($TestArray['Total'])代碼將無法工作,因爲'Total'鍵(和另一部分的Count_all鍵)在一個數組內。使用示例您有:

Array 
(
    [86] => Array 
     (
      [134] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 36.00 
       ) 

      [130] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 28.00 
       ) 

      [135] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 125.00 
       ) 

      [131] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 67.00 
       ) 

      [133] => Array 
       (
        [User_ID] => 8 
        [Item_ID] => 86 
        [Total_Amount] => 368.80 
       ) 

      [Total] => 624.8 
      [Count_all] => 5 
     ) 
); 

數組鍵你需要(假設數組在$TestArrayunset($TestArray[86]['Total'];

對於問題的第二部分,你需要遍歷。第一陣列,並建立從值的新陣列同樣,假設你的第一個數組的例子是$TestArray可以做些沿的行:

$newArray = array(); // this will be the array in the correct format 
foreach ($TestArray as $key => $value) { 
    if (is_array($value)) { 
     $newArray[] = $value; 
    } 
} 

這也有去除達爾和Count_的優勢因爲他們不是數組

+0

感謝解決方案Gabe,但是在運行該代碼後,仍然出現「Total」和「Count_all」。你的代碼:unset($ TestArray [86] ['Total']);非常感謝您向我展示如何做到這一點。 – jeebee

+0

如果使用'$ newArray'變量,Total和Count_all不應該存在,它們不是數組。 – gabe3886

+0

您的代碼根據需要生成數組,除了不包括「Total」和「Count_all」之外。 在「86」級別不是「Total」和「Count_all」關聯數組項目嗎? – jeebee

1

一切都值得做的所有指標是值得過這樣做;-)
在PHP7(因爲anonymous class),你可以這樣做:

<?php 
$src = array(
    86 => array(
     134 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'36.00'), 
     130 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'28.00'), 
     135 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'125.00'), 
     131 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'67.00'), 
     133 => array('User_ID'=>8, 'Item_ID'=>86, 'Total_Amount'=>'368.00'), 
     'Total' => '624.8', 
     'Count_all' => 5 
    ), 

    67 => array(
     134 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'129.58'), 
     130 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'230.25'), 
     135 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'76.20'), 
     131 => array('User_ID'=>8, 'Item_ID'=>67, 'Total_Amount'=>'436.03'), 
     'Total' => '872.06', 
     'Count_all' => 4 
    ) 
); 

$iter = array_reduce(
    $src, 
    function($it, $e) { 
     $it->append( 
      new class(new ArrayIterator($e)) extends FilterIterator { 
       public function accept() { 
        return !in_array($this->key(), array('Total', 'Count_all')); 
       } 
      } 
     ); 
     return $it; 
    }, 
    new AppendIterator 
); 

foreach($iter as $v) { 
    echo join(', ', $v), "\r\n"; 
} 

打印

8, 86, 36.00 
8, 86, 28.00 
8, 86, 125.00 
8, 86, 67.00 
8, 86, 368.00 
8, 67, 129.58 
8, 67, 230.25 
8, 67, 76.20 
8, 67, 436.03 

還看到:
http://docs.php.net/spl
http://docs.php.net/array_reduce

+0

btw:我不建議你實際使用這個代碼來解決你的實際問題。但是......如果你理解了這個概念,它不會受到傷害;-)對於其他來源和取決於完成的處理(或沒有完成),它可能是有成效的。 – VolkerK