PHP多维数组嵌套两次

时间:2013-12-11 08:52:14

标签: php arrays multidimensional-array

我正在使用此功能从数据库中获取数据。

public function getModelSpecs($modelCode) {
    $modelSpecs = db::fetch_array("SELECT * FROM `product_specs` WHERE model='{$modelCode}'");

    return $modelSpecs;
}

我正在使用基于前一项计数的for循环访问。

for ($i = 0; $i < count($model); $i++) {
    $modelSpecs[] = $product->getModelSpecs($model[$i]['code']);
    $count++;
}
echo "<pre>".print_r($modelSpecs, true)."</pre>";

这一切都有效,但为什么它像这样嵌套我的数组,就像它的两个层次一样。

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [id] => 183
                    [model] => ZS125-48A
                    [engine_brand] => 158FMI-B
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [id] => 172
                    [model] => STR125YB
                    [engine_brand] => K154FMI
                )

        )

这只是它的结构,因为我已经在函数中获取数组,或者我不能这样做,所以它只是在这样一个级别:

Array
(
    [0] => Array
        (
                [id] => 183
                [model] => ZS125-48A
                [engine_brand] => 158FMI-B
        )

    [1] => Array
        (
                [id] => 172
                [model] => STR125YB
                [engine_brand] => K154FMI
        )

由于

3 个答案:

答案 0 :(得分:6)

我认为该行

$modelSpecs[] = $product->getModelSpecs($model[$i]['code']);

应该只是

$modelSpecs = $product->getModelSpecs($model[$i]['code']);

否则,您将结果集分配给$ modelSpecs数组的元素,而我认为您正在尝试将$ modelSpecs分配给整个结果集。

答案 1 :(得分:0)

只是为了更新每个人我已经使用fetch_row解决了问题,所以每次都会获取一个新行,然后将其存储到数组中。

public function getModelSpecs($modelCode) {
    $modelSpecs = db::fetch_row("SELECT * FROM `product_specs` WHERE model='{$modelCode}'");

    return $modelSpecs;
}

答案 2 :(得分:-1)

fetch_array返回一个条目数组。

所以就像

  • [0] =条目1
  • [1] =条目2
  • ...等

因此,如果您只想要第一个条目,则需要对其执行重置()以获取第一个条目。这是应该有效的更新代码......

for ($i = 0; $i < count($model); $i++) {
    $modelSpecs[] = reset($product->getModelSpecs($model[$i]['code']));
    $count++;
}
echo "<pre>".print_r($modelSpecs, true)."</pre>";

如果该函数由于某种原因没有返回数组,则会导致错误(如果查询没有找到任何内容,那么您可能希望这样做。

for ($i = 0; $i < count($model); $i++) {
    $myModelSpec=$product->getModelSpecs($model[$i]['code']);
    //goes to the next item if this last item isn't an array.
    if(!is_array($myModelSpec)) continue;
    $modelSpecs[] = reset($myModelSpec);
    $count++;
}
echo "<pre>".print_r($modelSpecs, true)."</pre>";