Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在foreach循环中是不同的。因为有两个循环,所以会产生很多结果_Php_Loops_Foreach - Fatal编程技术网

Php 在foreach循环中是不同的。因为有两个循环,所以会产生很多结果

Php 在foreach循环中是不同的。因为有两个循环,所以会产生很多结果,php,loops,foreach,Php,Loops,Foreach,我有一个自定义系统,可以在自定义列中添加新信息。 我的数据库中有两个表。一个用于我的价值数据,第二个用于列(数据域) 在上面,您可以看到我的表单中的一个图像,它是由自定义数据字段生成的,每个字段包含数据。 只有在我的for-each中,我对每个数据都有一个额外的循环,这就是为什么我从每个数据字段得到两个。我怎样才能解决这个问题 <?php foreach ($list as $key => $value) { ?> <?php foreach ($dataLis

我有一个自定义系统,可以在自定义列中添加新信息。 我的数据库中有两个表。一个用于我的价值数据,第二个用于列(数据域)

在上面,您可以看到我的表单中的一个图像,它是由自定义数据字段生成的,每个字段包含数据。 只有在我的for-each中,我对每个数据都有一个额外的循环,这就是为什么我从每个数据字段得到两个。我怎样才能解决这个问题

<?php foreach ($list as $key => $value) { ?>
    <?php foreach ($dataList as $data) { ?>
        <div class="row clearfix">
            <div class="col-xl-12">
                <div class="form-group form-group-default">
                    <label><?php echo ucfirst($key); ?></label>
                    <?php if($key == $data['name']) { ?>
                    <input type="text" class="form-control" name="value_<?php echo trim($data['name']); ?>" value="<?php echo trim($data['value']); ?>" required>
                    <?php }else{ ?>
                        <input type="text" class="form-control" name="value_<?php echo trim($data['name']); ?>" placeholder="<?php echo ucfirst($key); ?>">
                    <?php } ?>
                </div>
            </div>
        </div>
    <?php } ?>
<?php } ?>
数据示例:

['id' => 1, 'hash' => 123, 'field_id' => 1, 'value' => 'food']
字段:

['id','name']
字段示例:

['id' => 1, 'name' => 'firstname']
下面是foreach变量:

$data = processing('read', 'data JOIN fields ON data.field_id = fields.id', ['data.value,data.uid,fields.name,data.id,fields.category_id'], 'uid = "' . trim($_GET['datalist']) . '"', true);
$dataItem = processing('read', 'data JOIN fields ON data.field_id = fields.id', ['fields.category_id'], 'uid = "' . trim($_GET['datalist']) . '"');
$fieldList = processing('read', 'fields', ['name'], 'category_id = "'. trim($dataItem['category_id']) . '"',true);
$list = [];
foreach($fieldList as $key => $value) {
    $list[$value['name']] = $value['name'];
}
更新:

我更新了自己的问题,因为其他答案没有解决我的问题。我的答案中唯一的问题是,当我更新它时,它不会看项目的id,而是看项目的名称,所以我不能用相同的名称保存两个项目

<?php foreach ($dataItems as $key => $value) { ?>
<div class="row clearfix">
    <div class="col-xl-12">
        <div class="form-group form-group-default">
            <label><?php echo ucfirst($key); ?></label>
            <input type="text" placeholder="<?php echo ucfirst($key); ?>" class="form-control" name="<?php echo trim($key); ?>" value="<?php echo trim($value); ?>">
        </div>
    </div>
</div>
<?php } ?>
返回:

  array (
  '7d1f4f8e906245f' => 
  array (
    'Voornaam' => 'Bettina',
    'Achternaam' => 'Les',
    'Initialen' => 'pop',
    'uid' => '7d1f4f8e906245f',
  ),
  '7d1f4f8e906245g' => 
  array (
    'Voornaam' => 'Simone',
    'Achternaam' => '',
    'Initialen' => '',
    'uid' => '7d1f4f8e906245g',
  ),
  '7d1f4f8e906245l' => 
  array (
    'Voornaam' => 'test',
    'Achternaam' => 'Kül',
    'Initialen' => 'lol',
    'uid' => '7d1f4f8e906245l',
  ),
  '7d1f4f8e906245s' => 
  array (
    'Voornaam' => 'Joshua',
    'Achternaam' => 'Mas',
    'Initialen' => '',
    'uid' => '7d1f4f8e906245s',
  ),
  'gGcYEJdRYJ1vqcn' => 
  array (
    'Voornaam' => '',
    'Achternaam' => 'Hello',
    'Initialen' => '',
    'uid' => 'gGcYEJdRYJ1vqcn',
  ),
)

嗯,这就是你告诉你的应用程序要做的。对于每个数据字段,您迭代每个记录。重复的字段数将与您拥有的记录数匹配。能否请您添加有关数据库结构的更多详细信息?这似乎很奇怪。请参阅我问题的更新!在循环之前,如何获取
$list
$dataList
的值?我猜这是疑问。你能展示一下吗?在回答了你最近的几个问题@Pieter之后,我会认为我会在某种程度上理解你的申请,或者我的一个答案已经帮助你解决了数据问题。现在我在看你的一个新剧本,似乎既有没有意义的事情,也有无法解释的事情。我们不知道
processing()
做了什么,但是如果您向我们展示
var\u export($data)
var\u export($dataItem)
,以及
var\u export($fieldList)
@Pieter,
foreach($fieldList as$key=>$value)
很奇怪。您通过指定与键和值相同的字符串来强制唯一性。这真的是必要的步骤吗?是否需要清除重复的名称值?扩展而言,
foreach($key=>value)
声明
$key
是无用的,因为相同的值已经存在于
$value
中。您的
if
块中有相当多的冗余,可以提供一些合理的D.R.Y.ing。你所需要的(在屏幕截图中)和你所提供的数据之间存在脱节。请编辑。
public function getDataListItems(int $category, array $list) {
global $dbh;

$query = 'SELECT data.value, data.uid, fields.name FROM data JOIN fields ON data.field_id = fields.id WHERE fields.category_id = "' . trim($category) . '" ORDER BY uid';

$sql = $dbh->prepare($query);
$sql->execute();
$values = $sql->fetchAll(PDO::FETCH_ASSOC);

foreach ($values as $row) {
    if (!isset($items[$row['uid']])) {
        $items[$row['uid']] = array_fill_keys($list, '');  // if it needs to dynamically generated
        $items[$row['uid']]['uid'] = $row['uid'];
    }
    $items[$row['uid']][$row['name']] = $row['value'];
}
return $items;  
}
  array (
  '7d1f4f8e906245f' => 
  array (
    'Voornaam' => 'Bettina',
    'Achternaam' => 'Les',
    'Initialen' => 'pop',
    'uid' => '7d1f4f8e906245f',
  ),
  '7d1f4f8e906245g' => 
  array (
    'Voornaam' => 'Simone',
    'Achternaam' => '',
    'Initialen' => '',
    'uid' => '7d1f4f8e906245g',
  ),
  '7d1f4f8e906245l' => 
  array (
    'Voornaam' => 'test',
    'Achternaam' => 'Kül',
    'Initialen' => 'lol',
    'uid' => '7d1f4f8e906245l',
  ),
  '7d1f4f8e906245s' => 
  array (
    'Voornaam' => 'Joshua',
    'Achternaam' => 'Mas',
    'Initialen' => '',
    'uid' => '7d1f4f8e906245s',
  ),
  'gGcYEJdRYJ1vqcn' => 
  array (
    'Voornaam' => '',
    'Achternaam' => 'Hello',
    'Initialen' => '',
    'uid' => 'gGcYEJdRYJ1vqcn',
  ),
)