2016-07-07 87 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'));