2016-07-07 67 views
0

我有一些數據進入包含多行和多列的頁面。我特別想看一整列,並將其放入另一個數組中。array_column從包含數據的數組中返回0結果

我使用codeigniter和php。我的頁面上的var轉儲顯示其原始數組中的數據到達正常。但是,一旦我開始嘗試在頁面上創建第二個數組,該數組將返回0個結果。

這是原始數組的var_dump。爲了您的理智,生病只會發佈第一個序列。

陣列(7){[0] =>對象(stdClass的)#19(7){[ 「ID」] =>串(1) 「1」
[ 「SERIAL_NUMBER」] =>串(9)「battery 1」[「battery_type」] => string(4) 「Lipo」[「cell_count」] => string(1)「4」[「capacity」] => string(4)「16.8」 [ 「date_submitted」] =>串(19) 「0000-00-00 00:00:00」 [ 「user_id_submitted」] =>串(0) 「」} [1] =>

這裏是array_column功能

<?php 
    $serialnumber = array_column($batteryDb, "serial_number"); 
    var_dump($serialnumber); 
?> 

這裏是結果:

array(0) { } 
+0

好吧,似乎'$ batteryDb'沒有正確的結構。它必須是一個數組數組。你會非常高興將'var_dump($ batteryDb)'的輸出添加到原始文章 - 可能只是兩個項目。 –

+0

@JustinSellers編輯你的OP來包含你的樣本數組數據。 – topshot

+1

我剛剛爲你更新了它。 –

回答

2

好吧,var_dump($batteryDb);顯示了這個:

array(7) { 
[0] => object(stdClass)#19 (7) {      <----- object !! 
    ["id"]=> string(1) "1" 
    ["serial_number"]=> string(9) "battery 1" 
    ["battery_type"]=> string(4) "Lipo" 
    ["cell_count"]=> string(1) "4" 
    ["capacity"]=> string(4) "16.8" 
    ["date_submitted"]=> string(19) "0000-00-00 00:00:00" 
    ["user_id_submitted"]=> string(0) "" } 
[1] => 

的問題是,這種陣列結構不與array_column在PHP5工作。您有一個對象數組,但函數需要一個數組數組。

array_column上的對象數組僅支持PHP7。 引用:https://github.com/php/php-src/blob/PHP-7.0.0/UPGRADING#L626


基本的解決辦法是把你的對象成陣列:

array(7) { 
    [0] => array (7) {        <----- array !! 
     ["id"]=> string(1) "1" 

你可以做到這一點使用:

  • $array = (array) $object;
  • $array = get_object_vars($object);
  • 如果多維:$array = json_decode(json_encode($object), true);

這給一試:

$batteryDbArray = json_decode(json_encode($batteryDb), true); 

$serial_numbers = array_column($batteryDbArray, 'serial_number'); 
var_dump($serial_numbers); 
+0

好的,所以我試了一下。 (7){[0] => string(9)「battery 1」[1] => string(9)「battery 2」[2] => string(9)「battery 3」[3] => string(9)「battery 5」[4] => string(9)「battery 6」[5] => string(9)「battery 4」[6] => string(9)「battery 7」} –

+0

現在想出如何將這些放入下拉列表中。哈哈 –

0

我覺得array_column只在7.0中加入支持對象的數組,所以你可以嘗試升級PHP或者使用不同的方法。

嘗試array_map

$serial_numbers = array_map(function($e) { 
    return is_object($e) ? $e->serial_number : $e['serial_number']; 
}, $batteryDb); 

還有其他的,更糟的是,解決方案,如使用json_encodejson_decode())或遍歷數組轉換stdClassarray對象與get_object_vars或鑄造,但我認爲這些加不必要的開銷,並不太明顯:

$serial_numbers = array_column(json_decode(json_encode($batteryDb), true), 'serial_number'));