【问题标题】:Foreach loop not working as expected in phpForeach 循环在 php 中未按预期工作
【发布时间】:2021-10-06 11:38:33
【问题描述】:

我在 foreach 循环中获取数组,有两个键“sequence”(唯一,不重复)和“asset_type”(可以重复/相同) 而且我想用每个“asset_type”的每个“序列”运行循环,我想像下面的方式执行我的循环,这样我就可以检查每个“序列” 每个“资产类型”

sequence            asset_type
1                   1
1                   2
1                   n (last asset_type)
...

2                   1
2                   1
2                   n(last asset_type)
n(last sequence)    n(last sequence)

我当前的数组是这样的

Array
(
    [id] => 78
    [sequence] => 1
    [asset_type] => 8
)
(
    [id] => 3
    [sequence] => 2
    [asset_type] => 11
)
(
    [id] => 3
    [sequence] => 3
    [asset_type] => 25
)

这是我当前的代码(静态),如何使用每个“asset_type”检查每个“序列”(动态而不是静态)?

foreach ($feed as $key=> $fd) {
case ($fd['sequence'] == "1"):
 if ($fd['sequence'] == "1" && $fd['asset_type'] == "8") {
 // if condition match then ....
 }
 break;

【问题讨论】:

  • 您的描述有问题。如果您的序列确实是唯一的并且没有像您声称的那样重复,那么整个问题就没有意义了,因为“每个资产类型的每个序列”将正是资产类型的集合。
  • @arkascha: 我想创建条件,例如如果序列=1 和资产类型=1,如果序列=1 和资产类型=2...等等
  • @Ritika 不是只有 2 个嵌套的 for 循环吗?见这里sandbox.onlinephpfunctions.com/code/…
  • 这不是对我的评论的回答,对不起。您需要解决您的问题,您的描述,而不是在 cmets 中添加更多详细信息。现在你的序列是独一无二的并且不重复吗?
  • @arkascha:“sequence”将是唯一的,但“asset_type”可以重复

标签: php arrays loops foreach


【解决方案1】:

您可以使用 2 个嵌套循环来执行此操作。要仅打印序列资产类型值的唯一组合,您可以使用新的关联数组,例如 $set。制作一个由管道(|)符号分隔的字符串键。如果$set 中不存在此键,则添加该键并打印组合,否则,跳过它。

<?php

$data = array (
  0 => 
  array (
    'id' => 78,
    'sequence' => 1,
    'asset_type' => 8,
  ),
  1 => 
  array (
    'id' => 3,
    'sequence' => 2,
    'asset_type' => 11,
  ),
  2 => 
  array (
    'id' => 3,
    'sequence' => 3,
    'asset_type' => 25,
  ),
);

$set = [];

foreach($data as $value){
  foreach($data as $cousin_value){
    $pair = $value['sequence'] . "|" . $cousin_value['asset_type'];
    if(!isset($set[$pair])){
        $set[$pair] = true;
        echo $value['sequence']," ",$cousin_value['asset_type'],PHP_EOL;   
    }
  }
}

【讨论】:

  • 代码很好,但我如何使用“条件”(如果条件)?
  • @Ritika 如果情况出现在哪里?你想用 if 条件实现什么?
  • 我想根据条件显示 html 代码,例如....在您的代码之后,我得到了带有“asset_type”的“序列”,这很好,但现在我想像“如果sequence='1'" 和 "asse_type" ="8" (从我得到的数组中检查)然后 所以像这样我将使用条件并显示 html 代码(根据数组/数据库)
  • @ritika 但是如果有 200 个这样的组合,你不能写 200 if conditions。
  • 你是对的,但我可以使用以下代码吗?这是正确的吗 ?根据我的工作,我在“第二个 foreach 循环”下面使用这一行,它的动态 if($value['sequence']==$sequencess && $cousin_value['asset_type']==$asset_types) { echo "show html代码在这里"; }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多