Bir dizinin her dizenin saklanan düzenleme değerler

3 Cevap

Bana bir özel dizi hattına gezinmenizi aşağıdaki kodu kullanarak ve altdizilim hat ve değerini değiştirmek duyuyorum.

I ancak yapmanız gereken, boş veya değersiz tüm satırların ilk sütununu değiştirmek, ya da onları temizlemek olduğunu.

Nasıl Bunu gerçekleştirmek için aşağıdaki kodu değiştirebilirsiniz?

<?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);
?>

3 Cevap

foreach veya array_map Bir dizinin tüm elemanları üzerinde aynı eylemi gerçekleştirmek için kullanın.

Bu durumda, kabaca bu satırlar boyunca bir şey?

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

Ben sizin için hazır bir cevap yok ama ben CakePHP's Set class kontrol öneriyoruz. Çok iyi bu gibi şeyler yapar ve (bazı yöntemler) XPath'i destekler. Umarım orada gereken kod bulabilirsiniz.

O dosyanın boyutuna bağlı olarak, bu çok daha verimli döngü daha olabilir:

$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

Eğer yukarıda olduğu gibi bundan sonra dosyaya geri yazmak.

Lütfen sütunlar%% içlerinde arka arkaya görünmesini izin verirse bu kaçış karakterleri için izin vermek için ayarlanması gerekir, ama bunun dışında, bu çalışması gerekir.

Bu csv dosyası GERÇEKTEN büyük almak için beklemek, yerine file_get_contents kullanarak belleğe tamamen okumaktan daha çizgiyle dosyası satır döngü düşünmeye başlamalıdır. I fgets_csv sizi işaret ediyorum, ama \ r \ n ile # # # ayırıcı yerine istekli olmadıkça Yenisatır dışındaki sınırlayıcı herhangi bir (her CSV hat almak mümkün inanmıyorum .) Eğer bu şekilde devam sonunda ise, cevabı tamamen değiştirir: P

Regex hakkında daha fazla bilgi (özellikle pozitif lookaheads) Regex Tutorial - Lookahead and Lookbehind Zero-Width Assertions (ayrıca genel regex için harika bir site) görmek için