【问题标题】:PHP - foreach loop not return all keys and valuesPHP - foreach 循环不返回所有键和值
【发布时间】:2022-10-14 21:34:00
【问题描述】:

我的 php 代码中有一个数组


$list = array(
'RETAIL' => 'SUPERMARKET'
'RETAIL' => 'BAR'
'RETAIL' => 'DEP. MARKET'
'BUSINESS' => 'HOTEL'
'BUSINESS' => 'PUB'
'OTHER' => 'GROCERY'
'OTHER' => 'BUTCHERY'
// I have 20+ items
);

foreach( $list as $type => $name ){
  var_dump($type,$name);
}

//var_dump() output 
// RETAIL SUPERMARKET
// BUSINESS HOTEL
// OTHER BUTCHERY

我面临的问题是,当我尝试循环数组时,只会返回三个值,其余的被忽略。我该如何解决这个问题? 我正在尝试循环数组以将数据保存到自定义 wordpress 数据库中。以同样的方式,我成功地循环了另一个数组,将键和值插入到数据库中。

【问题讨论】:

  • PHP 数组不能有多个具有相同键的条目,但您可以将每个键作为包含多种类型的数组。 ['retail' => ['bar', 'shop']]
  • 您能否添加更多详细信息,从哪里检索此 $list 数组?
  • @Dale 好的。如果您提供示例答案,我会接受。谢谢您的帮助
  • @newbiedev 您可以添加用于从 excel 文件中提取数据的代码吗?
  • @Dale 的意思是这个数组实际上不可能存在。一个键将覆盖另一个键。

标签: php arrays wordpress loops foreach


【解决方案1】:

我认为您的数组的更好结构是这样的

$list = [
    'RETAIL' => [
        'BAR',
        'RESTAURANT'
    ]
];

你可以像这样循环

foreach ($list as $businessType => $businesses) {
    foreach ($businesses as $business) {
         echo "<li>{$business}</li>";
    }
}

只是一个例子

【讨论】:

  • 我正在测试解决方案,似乎工作正常。只是关于键的问题,我可以将 RETAIL 用作插入到我的数据库查询中的值吗?
  • 如果我理解正确,在上面代码中的第一个 foreach 之后,你有变量 $businessType 这是第一个键 RETAIL
【解决方案2】:

作为一般方式在处理每条数据有多个元素的实例时(即使它可能不在这样的树结构中),您应该将列表中的每个项目构造为数组或对象,例如:

$list_of_arrays = [
    ['RETAIL', 'SUPERMARKET'],
    ['RETAIL', 'BAR'],
    ['RETAIL', 'DEP. MARKET'],
];

foreach( $list_of_arrays as $array ){
    echo "<li>{$array[0]} {$array[1]}</li>";
}

或者

$list_of_objects = [
    (object)['type' => 'RETAIL', 'subtype' => 'SUPERMARKET'],
    (object)['type' => 'RETAIL', 'subtype' => 'BAR'],
    (object)['type' => 'RETAIL', 'subtype' => 'DEP. MARKET'],
];

foreach( $list_of_objects as $object ){
    echo "<li>{$object->type} {$object->subtype}</li>";
}

【讨论】:

    【解决方案3】:

    也许我展示了很多,但由于每个实体只有两个数据,为什么你的表没有像这样在基础上构建......?

    $list = array(
    'SUPERMARKET'=>'RETAIL',
    'BAR'=>'RETAIL',
    'DEP. MARKET'=>'RETAIL',
    'HOTEL'=>'BUSINESS',
    'PUB'=>'BUSINESS',
    'GROCERY'=>'OTHER',
    'BUTCHERY'=>'OTHER'
    // I have 20+ items
    );
    

    您确实有唯一标识实体的键。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多