【问题标题】:Cannot store data within a foreach loop, constantly loops无法在 foreach 循环中存储数据,不断循环
【发布时间】:2019-04-27 10:06:46
【问题描述】:

我正在尝试将特定数据存储到 array 中,以便以后使用。

我尝试将数据按键存储在数组中。但它只是不断地循环比它需要的次数多得多。我设置了一个条件,当row = "configurable"(应该是每 5 行或 6 行)它会卸载数据并重新启动。因此,我可以将数据放入“可配置”行,然后重新开始。

我可能完全错了,但我看不出有其他解决方法。我也尝试将 "For" 循环放在 Foreach 中,但这只是给我带来了更多循环问题。

$Ptype 是在此循环之外声明的值。它应该每 4 - 6 行出现一次)

$rowArr = 

[1] => Array
    (
        [0] => 5.5
        [1] => sku123
        [2] => default
        [3] => simple
        [4] => testData4
        [5] => testData5
        [6] => testData6
    )
[2] => Array
    (
        [0] => 5.9
        [1] => sku456
        [2] => default
        [3] => simple
        [4] => testData4
        [5] => testData5
        [6] => testData6
    )

$rowArr 持续大约 1000 行。我想获取值 [1] 和 [3],并在满足“if($ptype == 'configurable')”时放置它们。完成后,我想在 $rowData 数组中继续并重复,直到再次出现 if 语句。

所以输出应该是(我会稍微格式化一下):

[5.5, 简单, 5.9, 简单, ... , ...]

然后一旦满足 if 语句就应该删除它,以便为新的值腾出空间。

   for ($i=1; $i < count($rowArr); $i++) {

    $Data[] = $rowArr[$i][1];
    $Data[] = $rowArr[$i][3];
    // without a "break;" here, it gets too many rows.
}


if($ptype == 'configurable'){

  $dataim = implode("," , $Data);
  echo $dataim . "\n";
  $dataim = "";

      // If I "die;" here, it fills the first row correctly, but it needs to get every row.
  reset($Data);
} 

我也尝试过(我尝试过很多在休息时移动等):

for ($i=1; $i < count($rowArr); $i++) {

    $Data[] = $rowArr[$i][1];
    $Data[] = $rowArr[$i][3];

    if($ptype == 'configurable'){

        $dataim = implode("," , $Data);
        echo $dataim . "\n";
        $dataim = "";

        reset($Data);
        break;
    } 

}

总结:

  1. 从另一个数组存储值 [1] 和 [3]

  2. 一旦 [3] 值可配置,转储数据并在数组中重新开始。无限期地继续,直到行完成。

实际结果:

  1. 只是一遍又一遍地循环前 2 个值,如果实现了中断,则不会获取任何其他数据。如果foreach 循环中没有中断,它将永远循环。

  2. 在 for 循环中使用 "die;",它会获取正确的数据,但仅限于第一行。

【问题讨论】:

  • 你能发布什么值rowArr 和你的预期输出
  • @RakeshJakhar 我已经编辑了原帖

标签: php arrays loops foreach


【解决方案1】:

您似乎正在使用Magento 并希望检索configurable 产品的simple 产品。

你的方法是这样的

$arr = [
 [5.5,'sku123','default','simple','testData4','testData5','testData6'],
 [5.9,'sku456','default','simple','testData4','testData5','testData6'],
 [5.9,'sku4561','default','configurable','testData4','testData5','testData6'],
 [5.5,'sku123111','default','simple','testData4','testData5','testData6'],
 [5.9,'sku456222','default','simple','testData4','testData5','testData6'],
[5.9,'sku456123','default','configurable','testData4','testData5','testData6'],
];
$data = [];
$records = [];
for($i=0;$i<count($arr);$i++){
 ($arr[$i][3] == 'configurable') ? ($records[$arr[$i][1]] = implode(',',call_user_func_array('array_merge', $data)) AND $data=[]) : ($data[] = [ $arr[$i][1],$arr[$i][3] ]);
}
echo '<pre>';
print_r($records);

输出:

Array
(
 [sku4561] => sku123,simple,sku456,simple
 [sku456123] => sku123111,simple,sku456222,simple
)

【讨论】:

  • 是的!我正在使用 Magento 2。需要提取此数据以进行导入。我的代码出现此错误。但它显示在 print_r 中:警告:array_merge() 需要至少 1 个参数,0 在第 204 行的____中给出 PHP 警告:implode():第 204 行____中传递的参数无效
  • @user3623937 可能是您的代码有问题
  • 我清理了我的导入表(这就是问题所在)您的解决方案完美运行!谢谢。
【解决方案2】:

在第一个代码示例中,for 循环一直持续到 $rowArr 的末尾,因为没有中断条件。

在第二个代码示例中,循环提前结束,因为一旦 $ptype 为“可配置”,循环就不会再次开始。

我用自己的 $rowArr 做了一些测试,也许下面的代码会对你有所帮助。

$configurable = ["l", "w"];

$rowArr = array(
    ["not-configurable", "a", "b", "c"],
    ["not-configurable", "d", "e", "f"],
    ["not-configurable", "g", "h", "i"],
    ["configurable", "j", "k", "l"],
    ["not-configurable", "m", "n", "o"],
    ["not-configurable", "p", "r", "s"],
    ["configurable", "t", "u", "w"],
    ["not-configurable", "x", "y", "z"]
);

for ($i=0; $i < count($rowArr); $i++) {

    $Data[] = $rowArr[$i][1];
    $Data[] = $rowArr[$i][3];

    if(in_array($rowArr[$i][3], $configurable)) {

        $dataim = implode("," , $Data);
        echo $dataim . "\n";
        $dataim = "";

        reset($Data);
        array_splice($rowArr, $i, 1);
        $i = -1;

    } 
}

我希望我正确理解了您想要实现的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2020-02-19
    • 1970-01-01
    • 2021-07-17
    • 2019-06-17
    • 1970-01-01
    • 2011-06-01
    相关资源
    最近更新 更多