【发布时间】:2020-10-18 22:40:23
【问题描述】:
我不明白如何在数组中搜索一个值并从搜索的行返回另一个值。
所以,我为此使用了 foreach/for 循环,但它只为第一个函数请求返回我。使用1次后,函数返回null值。
这是 for 循环的代码:
$users = $bdd->query('SELECT * FROM userkeys');
$scripts = $bdd->query('SELECT * FROM scripts');
function GetNameFromId($users, $id){ // $users = PDO Statement - $id = value to search in array
$users = $users->fetchAll();
for($i = 0, $size = count($users); $i < $size; ++$i) {
if($users[$i]['id'] == $id){
return $users[$i]['name'];
}
}
}
这是 foreach 循环的代码:
$users = $bdd->query('SELECT * FROM userkeys');
$scripts = $bdd->query('SELECT * FROM scripts');
function GetNameFromId($users, $id) { // $users = PDO Statement - $id = value to search in array
foreach($users as $user) {
if($user['id'] == $id) {
return $user['name'];
}
}
}
代码在哪里执行?
问题是我在哪里调用函数:
echo GetNameFromId($users, [...]) 。 '
';
<tbody>
<?php foreach($scripts as $script): ?>
<tr>
<th scope="row">
<?= $script['id']; ?>
</th>
<th scope="row">
<?= $script['name']; ?>
</th>
<th scope="row">
<?= $script['price']; ?>
</th>
<td>
<span class="badge badge-dot mr-4">
<?php if($script['state'] == 1){?>
<i class="bg-danger"></i>
<span class="status">démarrage</span>
<?php }elseif($script['state'] == 2){ ?>
<i class="bg-info"></i>
<span class="status">en cours</span>
<?php }elseif($script['state'] == 3){ ?>
<i class="bg-warning"></i>
<span class="status">en retard</span>
<?php }elseif($script['state'] == 4){ ?>
<i class="bg-success"></i>
<span class="status">livré</span>
<?php } ?>
</span>
</td>
<td>
<div class="d-flex align-items-center">
<span class="completion mr-2"><?= $script['percent']; ?>%</span>
<div>
<div class="progress">
<?php if($script['percent'] <= 33){?>
<div class="progress-bar bg-danger" role="progressbar" aria-valuenow="<?= $script['percent']; ?>" aria-valuemin="0" aria-valuemax="100" style="width: <?= $script['percent']; ?>%;"></div>
<?php }elseif($script['percent'] > 33 AND !($script['percent'] == 100)){ ?>
<div class="progress-bar bg-info" role="progressbar" aria-valuenow="<?= $script['percent']; ?>" aria-valuemin="0" aria-valuemax="100" style="width: <?= $script['percent']; ?>%;"></div>
<?php }else{ ?>
<div class="progress-bar bg-success" role="progressbar" aria-valuenow="<?= $script['percent']; ?>" aria-valuemin="0" aria-valuemax="100" style="width: <?= $script['percent']; ?>%;"></div>
<?php } ?>
</div>
</div>
</div>
</td>
<th scope="row">
<?php
$decode = json_decode($script['client_id']);
echo var_dump($decode);
if(is_array($decode)){
for($i = 0, $size = count($decode); $i < $size; ++$i) {
echo GetNameFromId($users, intval($decode[$i])) . '<br>';
}
}else{
echo GetNameFromId($users, $script['client_id']) . '<br>';
}
?>
</th>
<td>
<div class="dropdown">
<a class="btn btn-sm btn-icon-only text-light" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-pen text-info"></i>
</a>
<div class="dropdown-menu dropdown-menu-right dropdown-menu-arrow">
<a class="dropdown-item" href="updates.php?type=1&id=<?= $script['idhash']; ?>">Ajouter une update</a>
<a class="dropdown-item" href="updates.php?type=2&id=<?= $script['idhash']; ?>">Modifier le script</a>
<a class="dropdown-item" href="updates.php?type=3&id=<?= $script['idhash']; ?>">Supprimer le script</a>
</div>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
要恢复,当我使用该功能 1 次时,它可以正常工作,但如果我使用超过 1 次,第一个值是可以的,但所有其他值为 null。
谢谢!
【问题讨论】:
-
如果您想选择 1 个用户,您是否使用类似
SELECT * FROM userTable WHERE id = ?的 SQL? -
我认为它会发出很多很多的 SQL 请求。所以我认为这不是一个好主意?我之前得到了所有用户,然后我想检查一下。事实上,我想用
来做这件事并列出所有的用户。
标签: php arrays for-loop foreach