【问题标题】:Foreach loop only returns first index on multidimensional arrayForeach 循环仅返回多维数组的第一个索引
【发布时间】:2017-11-09 22:07:29
【问题描述】:

我在数组中的数组中有一个数组,如下所示:

$flattened_pics = array (
    [0] = array (
        _A = array (a bunch of data),
        _B = array (a bunch of data)
    ),
    [1] = array (
        _A = array (a bunch of data),
        _B = array (a bunch of data)
    )
)   

当我在外部数组上运行以下函数时,它成功地在内部数组上返回索引 [0] 的结果,但不是索引 [1]。

$goods['arts'] = Goods_Model_Ajax::convertLettered_arrays($flattened_pics);

我需要它来返回 $flattened_pics[0] 和 $flattened_pics[1] 的结果。

我尝试过单个 foreach 循环(如下所示)、嵌套的 foreach 循环和其他变体。也许我需要在其中添加一个索引,但我不确定。

    if($flattened_pics) {
        foreach($flattened_pics AS $goods) {
            $goods['pics'] = array(Goods_Model_Ajax::convertLettered_arrays($goods)
            );

        }
    }

下面是函数 convertLettered_arrays 的样子。

public static function convertLettered_arrays($pics)
{
    $out_pictures = array();
    $out_pictures['picture_a'] = array();
    $out_pictures['picture_b'] = array();
    $out_pictures['picture_c'] = array();
    $out_pictures['picture_d'] = array();

    $out_pictures['picture_a']['image'] = $pics[0]['_A']['picture_temp.image'];
    $out_pictures['picture_a']['original'] = $pics[0]['_A']['picture_temp.original'];
    $out_pictures['picture_a']['width'] = $pics[0]['_A']['picture_temp.width'];
    $out_pictures['picture_a']['height'] = $pics[0]['_A']['picture_temp.height'];
    $out_pictures['picture_a']['mime'] = $pics[0]['_A']['picture_temp.mime'];

    $out_pictures['picture_b']['image'] = $pics[0]['_B']['picture_temp.image'];
    $out_pictures['picture_b']['original'] = $pics[0]['_B']['picture_temp.original'];
    $out_pictures['picture_b']['width'] = $pics[0]['_B']['picture_temp.width'];
    $out_pictures['picture_b']['height'] = $pics[0]['_B']['picture_temp.height'];
    $out_pictures['picture_b']['mime'] = $pics[0]['_B']['picture_temp.mime'];

    $out_pictures['picture_c']['image'] = $pics[0]['_C']['picture_temp.image'];
    $out_pictures['picture_c']['original'] = $pics[0]['_C']['picture_temp.original'];
    $out_pictures['picture_c']['width'] = $pics[0]['_C']['picture_temp.width'];
    $out_pictures['picture_c']['height'] = $pics[0]['_C']['picture_temp.height'];
    $out_pictures['picture_c']['mime'] = $pics[0]['_C']['picture_temp.mime'];

    $out_pictures['picture_d']['image'] = $pics[0]['_D']['picture_temp.image'];
    $out_pictures['picture_d']['original'] = $pics[0]['_D']['picture_temp.original'];
    $out_pictures['picture_d']['width'] = $pics[0]['_D']['picture_temp.width'];
    $out_pictures['picture_d']['height'] = $pics[0]['_D']['picture_temp.height'];
    $out_pictures['picture_d']['mime'] = $pics[0]['_D']['picture_temp.mime'];

    return $out_pictures;
}

【问题讨论】:

  • 我想问题出在你的函数 convertLettered_arrays() 上。没有这个功能我们就无能为力了。
  • Tx @VincentDecaux,刚刚添加了这个功能。看起来函数没有遍历索引????

标签: php arrays foreach


【解决方案1】:

你应该像这样循环。

if ($flattened_pics) {
    foreach ($flattened_pics AS $goods) {
        $converted[] = Goods_Model_Ajax::convertLettered_arrays($goods);
    }
}

然后在您的convertLettered_arrays 函数中,您只需删除所有[0]。像这样的:

$out_pictures['picture_a']['image'] = $pics['_A']['picture_temp.image'];
$out_pictures['picture_a']['original'] = $pics['_A']['picture_temp.original'];
$out_pictures['picture_a']['width'] = $pics['_A']['picture_temp.width'];
$out_pictures['picture_a']['height'] = $pics['_A']['picture_temp.height'];
$out_pictures['picture_a']['mime'] = $pics['_A']['picture_temp.mime'];

您可以通过转储转换后的数组来检查输出

var_dump($converted);

我还建议您只循环使用您的 convertLettered_arrays 函数,这样您就可以避免使用厚代码

【讨论】:

  • 非常感谢@Erwin。那工作得很好。我还不是很擅长数组和循环,否则,我会浓缩这个。
  • @ian,欢迎。当然,我们都开始慢慢学习每一件事。祝你的项目好运! :)
猜你喜欢
  • 2020-02-08
  • 2020-12-29
  • 1970-01-01
  • 2017-01-30
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
相关资源
最近更新 更多