为什么我在下面的代码中只得到数组 "row" 中的第一行值。我需要与查询对应的所有值

why am i only getting the first row value in array "row" in the below code. i need all the values corresponding to the query

  $s = $conn->prepare($q);
  $s->execute([$tagIdValue]);
  $d = $s->fetchAll();
  return $d;

function x($d) {
    foreach ($d as $row) {
      $val = $row["id"];
      $cont = trimContent($row);
      return $row;
    }
  }

我有一个查询,其中 returns table 中的所有值和一个将其转换为关联数组的函数。但只得到数组中的第一行

因为你在循环中使用 return,它只取第一个值和 return 它。

  $s = $conn->prepare($q);
  $s->execute([$tagIdValue]);
  $d = $s->fetchAll();
  return $d;

function x($d) {
    $arr =[]
    foreach ($d as $row) {
      $val = $row["id"];
      $cont = trimContent($row);
      array_push($arr, $val)
    }
   return $arr;
  }

您需要 return 循环外 :

$s = $conn->prepare($q);
$s->execute([$tagIdValue]);
$d = $s->fetchAll();
return $d;

function x($d) {
  $arr =array();
  foreach ($d as $k=> $row) {
    $val = $row["id"];
    $cont = trimContent($row);
    $arr[$k] = $row;
  }
  return $arr;
}

将您的 return 放在循环之外,因此只有它 return 只是第一个循环

function x($d) {
   foreach ($d as $row) {
     $val = $row["id"];
     $cont = trimContent($row);
     return $row;
}
}

因为,您正在return循环中获取结果集。

因此,只有第一行是从循环中 return 编辑的。

由于在第一次迭代中遇到了 return 语句,因此,该函数将 return 并且控制将退出该函数。

并且下一次迭代不会遍历结果集。

我们需要在循环之前创建一个数组,

将结果附加到该数组

和return数组。

更正后的代码:

$s = $conn->prepare($q);
  $s->execute([$tagIdValue]);
  $d = $s->fetchAll();
  return $d;

function x($d) {
 $array = array();
    foreach ($d as $row) {
      $val = $row["id"];
      $cont = trimContent($row);
       $array[] = $row;
    }
 return $array;
}

不要在循环中编写 return,而是用数组推送或数组移位函数替换该行。

循环结束后 return 从 array_push/array_shift 获得的最终结果。