首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编辑存储在数组的每个子数组中的值

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

Stack Overflow用户
提问于 2009-11-03 07:52:06
回答 3查看 464关注 0票数 1

我使用以下代码导航到特定的数组行和子数组行并更改其值。

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

如何更改下面的代码来完成此操作?

代码语言:javascript
复制
<?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);
?>
EN

回答 3

Stack Overflow用户

发布于 2009-11-03 07:58:33

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

在这种情况下,大致是这样的吗?

代码语言:javascript
复制
foreach($rows as &$row) {
    $row[0] = NULL;
}
票数 4
EN

Stack Overflow用户

发布于 2009-11-03 07:56:51

我没有现成的答案给你,但我建议你去看看CakePHP's Set class。它做这样的事情做得很好,并且(在某些方法中)支持XPath。希望你能在那里找到你需要的代码。

票数 0
EN

Stack Overflow用户

发布于 2009-11-03 15:37:40

根据该文件的大小,这可能比循环遍历要高效得多:

代码语言:javascript
复制
$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_get_contents将其完全读取到内存中。我建议您使用fgets_csv,但我不认为可以使用换行符以外的任何分隔符来获取每个csv行(除非您愿意将###分隔符替换为\r\n)。如果你最终选择了这种方式,答案就完全不同了:P

有关正则表达式的更多信息(特别是正则表达式),请参阅Regex Tutorial - Lookahead and Lookbehind Zero-Width Assertions (这也是一个很棒的正则表达式站点)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1664447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档