Php 编辑存储在数组的每个子数组中的值

Php 编辑存储在数组的每个子数组中的值,php,Php,我正在使用下面的代码,它允许我导航到特定的数组行和子数组行并更改其值 但是,我需要做的是将所有行的第一列更改为空白或NULL,或者清除它们 如何更改下面的代码以实现此目的 <?php $row = $_GET['row']; $nfv = $_GET['value']; $col = $_GET['col']; $data = file_get_contents("temp.php"); $csvpre = explode("###", $data); $i = 0; $j = 0;

我正在使用下面的代码,它允许我导航到特定的数组行和子数组行并更改其值

但是,我需要做的是将所有行的第一列更改为空白或NULL,或者清除它们

如何更改下面的代码以实现此目的

<?php
$row = $_GET['row'];
$nfv = $_GET['value'];
$col = $_GET['col'];

$data = file_get_contents("temp.php");
$csvpre = explode("###", $data);
$i = 0;
$j = 0;

if (isset($csvpre[$row]))
{
  $target_row = $csvpre[$row];
  $info = explode("%%", $target_row);
  if (isset($info[$col]))
  {
     $info[$col] = $nfv;
  }
  $csvpre[$row] = implode("%%", $info);
}


$save = implode("###", $csvpre);
$fh = fopen("temp.php", 'w') or die("can't open file");
fwrite($fh, $save);
fclose($fh);
?>

我没有现成的答案给你,但我建议你退房。它可以很好地完成类似的事情,并且(在某些方法中)支持XPath。希望您能在那里找到所需的代码。

我没有现成的答案,但我建议您退房。它可以很好地完成类似的事情,并且(在某些方法中)支持XPath。希望您能在那里找到所需的代码。

使用或对数组的所有元素执行相同的操作

在这种情况下,大致沿着这些线

foreach($rows as &$row) {
    $row[0] = NULL;
}
使用或对数组的所有元素执行相同的操作

在这种情况下,大致沿着这些线

foreach($rows as &$row) {
    $row[0] = NULL;
}

根据该文件的大小,这可能比通过以下循环更有效:

$data = file_get_contents("temp.php"); //data = blah%%blah%%blah%%blah%%###blah%%blah%%blah
$data = preg_replace( "/^(.+?)(?=%%)/", "\\1", $data ); //Replace first column to blank
$data = preg_replace( "/(###)(.+?)(?=%%))/", "\\1", $data ); //Replace all other columns to blank
之后,按照上面的操作将其写回文件

如果您的列允许%%在其中连续出现,则需要调整此设置以允许转义字符,但除此之外,此设置应该可以工作

如果您希望这个csv文件变得非常大,那么您应该开始考虑一行一行地循环文件,而不是使用file\u get\u内容将其完全读取到内存中。我想向您指出,但我认为不可能用除换行符以外的任何分隔符来获取每个csv行(除非您愿意用\r\n替换####分隔符)。如果你最终走这条路,答案完全不同:P


有关Regex(特别是正面外观)的更多信息,请参阅(通常也是Regex的好站点)

根据该文件的大小,这可能比循环使用更有效:

$data = file_get_contents("temp.php"); //data = blah%%blah%%blah%%blah%%###blah%%blah%%blah
$data = preg_replace( "/^(.+?)(?=%%)/", "\\1", $data ); //Replace first column to blank
$data = preg_replace( "/(###)(.+?)(?=%%))/", "\\1", $data ); //Replace all other columns to blank
之后,按照上面的操作将其写回文件

如果您的列允许%%在其中连续出现,则需要调整此设置以允许转义字符,但除此之外,此设置应该可以工作

如果您希望这个csv文件变得非常大,那么您应该开始考虑一行一行地循环文件,而不是使用file\u get\u内容将其完全读取到内存中。我想向您指出,但我认为不可能用除换行符以外的任何分隔符来获取每个csv行(除非您愿意用\r\n替换####分隔符)。如果你最终走这条路,答案完全不同:P


有关Regex的更多信息(特别是正面外观),请参阅(通常也是Regex的好网站)

抱歉,忘记了$before行(&before)。现在已修复。此外,如果您不介意将第一个数组元素全部切掉,以便$row[0]引用最初的$row[1],那么只需执行
array\u shift($row)
。抱歉,忘记了$row之前的(&F)。现在已修复。另外,如果您不介意将第一个数组元素全部切掉,以便$row[0]引用最初的$row[1],那么只需执行
array\u shift($row)