如何正确显示更深的数组值?

时间:2019-05-19 20:50:42

标签: php arrays

我无法使用PHP访问数组的更深部分并将其以某种方式显示在页面上。

我正在尝试显示带有城市和计数的数据:

Mobile (3)
Auburn (2)

这是我的数组:

Array
(
[0] => Array
    (
        [0] => Array
            (
                [city] => Mobile
                [numLocations] => 3
            )

        [1] => Array
            (
                [city] => Auburn
                [numLocations] => 2
            )

    )

)

这是我到目前为止所拥有的。这只会显示单词“ Array”。

while($row = mysqli_fetch_assoc($result)){
    $state = $row['state'];
    $stateAbv = $row['stateAbv'];
    $city = $row['city'];
    $numSLocations = $values['cnt']; 

    if (!isset($rows[$row['state']])){
        $rows[$row['state']] = array();
    }

    $rows[$row['state']][] = ['city' => $city, 'numLocations' => $numLocations];
}

foreach($rows as $state => $cities){
   echo array_column($cities, 'numLocations'));
}

2 个答案:

答案 0 :(得分:2)

  

我正在尝试用城市和计数显示这样的数据:

     

移动(3)

     

奥本(2)

未经测试

while($row = mysqli_fetch_assoc($result)){
    if (!isset($rows[$row['state']])) $rows[$row['state']] = 0; //initialize with 0

    $rows[$row['state']] += $row['cnt']; //increment the num Stores
}

行应该是这样的:

['Mobile' => 3, 'Auburn' => 2]

您也遇到了这个问题( $ values ):

$numSLocations = $values['cnt']; 

换句话说,$values是什么,如果没有更多上下文,就无法知道它是什么。我只是假设您的意思是$row

然后(如果您真的想使用()并返回2行。)

foreach($rows as $state => $num){
   echo "$state ($num)\n\n";
}

输出

Mobile (3)

Auburn (2)

如果您尝试转换该数组,我不知道这与该数组有什么关系(MySql结果):

print_r(array_column($array[0], 'numLocations', 'city'));

这仅在city是唯一且不会递增的情况下起作用。

  

这只会显示单词“ Array”。

当然,由于array_column返回一个数组(正如我上面刚刚显示的那样),并且您无法回显Array,因此可以,但是它只会显示“ Array”。这段代码正是这样做的:

foreach($rows as $state => $cities){
   echo array_column($cities, 'numLocations')); //returns an array
}

因此,请改用print_rvar_export等...以上结果将类似于:

 [0 => 3,1 => 2]

基本上是这样的:

array_column($array[0], 'numLocations')

干杯!

答案 1 :(得分:1)

感觉您只有第一个索引,可以通过array_shift跳过它

$row = array_shift($row);
// now fetch both the data.
$temp = array_column('numLocations','city');
foreach($temp as $k => $v){
    $result[] = $k.'('.$v.')';
}

这应该可以解决您的问题。