【问题标题】:How to return a "C" value by search in an "B" array with "A" id如何通过在具有“A”id 的“B”数组中搜索来返回“C”值
【发布时间】: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


【解决方案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'];
      }
    }  
}  

【讨论】:

  • 感谢您的回复,我已经编辑了原始消息以添加所有代码。
猜你喜欢
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多