PHP Array Index/splice [已关闭]

vnjpjtjt  于 2023-05-16  发布在  PHP
关注(0)|答案(1)|浏览(111)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
2天前关闭。
Improve this question
我用的是PHP 5.4(不,我不能升级到更新的版本)。我试图在数组中找到一个元素的索引,但我很确定我做错了什么,因为当我调用array_splice()时,我得到了一个非法的字符串偏移错误。
我正在运行一个SQL查询,然后将每行推送到数组中。然后我试图找到行的一个属性的索引。当我不使用array_splice(),我只是把行,我没有错误,当我去打印出每个数组条目的特定属性。
编辑:

print_r(array[i]):

Array (
  [comment_id] => 0
  [reply_to] => 0
  [username] => user0
  [comment] => comment0
)

我想找到comment_id等于某个值的位置,然后在array[i+1]处插入一条新记录。
相关的PHP代码段:

$comment_array = array();
if($result->num_rows > 0) {
   while($row = $result->fetch_assoc()){
       $new_sql = "SELECT * FROM comments WHERE reply_to = " . $row["comment_id"] . " AND reply_to != comment_id";
       $new_result = $conn->query($new_sql);
       //array_push($comment_array, $row);
       if ($new_result->num_rows > 0) {
          if($row["reply_to"] >= $row["comment_id"]){
              array_push($comment_array, $row);
          }
                                              
          while($new_row = $new_result->fetch_assoc()) {
              $index = -1; 
              foreach($comment_array as $key => $val){
                  if ($val['comment_id'] == $new_row["reply_to"]) {
                    $index = $key;
                    break;
                  }
              }
              if($index > -1){
                  array_splice($comment_array, $index, 0, $new_row);
              } else {
                  array_push($comment_array, $new_row);
              }
           }
       } else if($row["reply_to"] == $row["comment_id"]){ 
           array_push($comment_array, $row);
       }
   }
}
icnyk63a

icnyk63a1#

你已经很接近了,你的array_split实际上把你的数组插入了array[i - 1]而不是array[i + 1]。在array[i+1]位置插入

$needleIndex = null;
              $needlePlusOneIndex = null;
              $needlePlusTwoIndex = null;
              foreach($comment_array as $key => $val){
                  if($needlePlusOneIndex !== null){
                      $needlePlusTwoIndex = $key;
                      break;
                  }
                  if($needleIndex !== null){
                      $needlePlusOneIndex = $key;
                      continue;
                  }
                  if ($val['comment_id'] == $new_row["reply_to"]) {
                    $needleIndex = $key;
                  }
              }
             if($needlePlusTwoIndex !== null){
                  array_splice($comment_array, $needlePlusTwoIndex, 0, $new_row);
              } else {
                  array_push($comment_array, $new_row);
              }

因为$needlePlusTwoIndex是array_splice在array[index + 1]处插入它所需要的(您的原始代码在index-1处插入它,使用$needlePlusOneIndex将在index处插入它,而$needlePlusTwoIndex将在index+1处插入它)

相关问题