php - 如何通过在具有“A”id 的“B”数组中搜索来返回“C”值
问题描述
我不明白如何在具有值的数组中搜索并从搜索的行返回另一个值。
所以,我为此使用了 foreach/for 循环,但它只为第一个函数请求返回我。使用 1 次后,函数返回空值。
下面是 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, [...]) 。'<br>';
<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 次,第一个值是好的,但所有其他的都是空的。
谢谢 !
解决方案
当您执行此操作时,我正确阅读了此内容
$users = $bdd->query('SELECT * FROM userkeys');
您实际上是在返回一个语句对象,而不是一个数组。您不能一遍又一遍地重用语句对象,您应该从对象中获取所有行并将其放在 $users 数组中。从那时起,您可以将 $users 变量作为数组重用。
这是我的例子
$usersstmt = $bdd->query('SELECT * FROM userkeys');
$users = $usersstmt->fetchAll();
$scriptsstmt = $bdd->query('SELECT * FROM scripts');
$scripts= $scriptsstmt->fetchAll();
function GetNameFromId($users, $id){
foreach($users as $user) {
if($user['id'] == $id){
return $user['name'];
}
}
}
推荐阅读
- gatsby - 如何从 gatsby wordpress 获取超过 100 个提取的数据结果
- sql-server - 使用 UNION 语句排序
- python-3.x - 在看板视图的标题上添加按钮
- javascript - 在 Firefox 26 中下载 webform JSON 对象列表
- java - 排序期间的 Java OutOfMemory
- r - 在 dplyr summarise() 中按组计算上下置信区间
- dagger-2 - 使用应用程序类进行改造注入 - Dagger 2 为什么不起作用?
- sql - 条件计数的更好方法?
- microsoft-graph-api - Graph Beta 通道获取消息返回“禁止”
- php - 如何保护单个 wordpress 网址免受攻击?