**关闭。**此题需要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);
}
}
}
1条答案
按热度按时间icnyk63a1#
你已经很接近了,你的array_split实际上把你的数组插入了
array[i - 1]
而不是array[i + 1]
。在array[i+1]
位置插入因为$needlePlusTwoIndex是array_splice在array[index + 1]处插入它所需要的(您的原始代码在index-1处插入它,使用$needlePlusOneIndex将在index处插入它,而$needlePlusTwoIndex将在index+1处插入它)