array_column从数据

时间:2016-07-07 17:28:49

标签: php mysql arrays codeigniter

我有一些数据进入一个包含多行和多列的页面。我特意想把整个列整理成另一个数组。

我正在使用codeigniter和php。我的页面上的var转储显示其原始数组中的数据正好到达。但是一旦我开始尝试在页面上创建第二个数组,该数组将返回0结果。

这是原始数组的var_dump。为了你的理智,生病只发布第一个序列。

  

array(7){[0] => object(stdClass)#19(7){[" id"] => string(1)" 1"
  [" SERIAL_NUMBER"] =>字符串(9)"电池1" [" battery_type"] =>串(4)   "前列" [" cell_count"] =>字符串(1)" 4" ["能力"] => string(4)" 16.8"   [" date_submitted"] => string(19)" 0000-00-00 00:00:00"   [" user_id_submitted"] => string(0)"" } [1] =>

这是 array_column 函数

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

以下是结果:

array(0) { }

2 个答案:

答案 0 :(得分: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] =>

问题是这个数组结构在PHP5上不能与array_column一起使用。

您有一个对象数组,但该函数需要一个数组数组。

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);

答案 1 :(得分:1)

我认为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())或使用{{3}迭代将stdClass转换为array个对象的数组或铸造,但我认为这些增加了不必要的开销,并且不太明显:

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