我有一些数据进入一个包含多行和多列的页面。我特意想把整个列整理成另一个数组。
我正在使用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) { }
答案 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_encode(json_decode())或使用{{3}迭代将stdClass
转换为array
个对象的数组或铸造,但我认为这些增加了不必要的开销,并且不太明显:
$serial_numbers = array_column(json_decode(json_encode($batteryDb), true), 'serial_number'));