LINUX.ORG.RU

php массив в цикле

 


0

1

Здравствуйте. Столкнулся с такой проблемой, что при каждой итерации массив присваивает определённый свой элемент переменной, но не перезаписывает его (что должно быть в моём понимании), а добавляет к присвоенному ранее значению в конец строки. Сколько итераций, столько и повторяется элемент массива в строке переменной, при этом переменная остаётся переменной. Как добиться перезаписи переменной с каждой итерацией?

Перемещено Zhbert из admin

Ответ на: комментарий от Zhbert

php массив в цикле

В чём может быть проблема? Ошибок нет. Проблема только в том, что переменная не обновляется. для этого должен применяться оператор .=, в моём случае стоит чистое присвоение.

alexisiumus ()

Специально для пхп-обезъянок поправил:

for ($a = 0; $a <= $count - 1; $a++) {
  $x = $array[$a];
  $y = $str0[$i];
  $z = $str1[$i];
  if ($x == $y) {
    $array[$a] = $z;
  }

Не хватает одной закрывающей }, если что.

Давай лучше демонстрационный код приведи, с входными данными.

AnDoR ★★★★★ ()
Ответ на: php массив в цыкле от vvn_black

php массив в цикле

Та же реакция, что и на моём сервере. Функция работает без ошибок, но как я уже сказал, переменная не перезаписывается, а дописывается, а поэтому при сравнении не срабатывает условие. Что за особенность такая, никто не может подсказать..

alexisiumus ()
Последнее исправление: alexisiumus (всего исправлений: 1)
Ответ на: комментарий от AnDoR

php массив в цикле

<?php
ini_set('error_reporting', E_ALL);
function zam_str($file, $str0, $str1) {
	$array = file("file");
	$count = count($array);
	$c = count($str0);                        
	for ($i = 0; $i <= $c - 1; $i++) {
		for ($a = 0; $a <= $count - 1; $a++) {
			$x = $array[$a]; 
			$y = $str0[$i];        
			$z = $str1[$i]; 
			if ($x == $y) {                                     
			$array[$a] = $z;
			//print_r($y);
        }
	}	 
	}
	    $fp = fopen('http://skil.su/php/temp/temp.php', 'w+');
		fputs($fp, implode("", $array));
		fclose($fp);
		echo "<h1>Ok!</h1>";
}
$st_zn = array("aaaaa");
$n_zn = array("bbbbb");
zam_str("http://skil.su/2/file", $st_zn, $n_zn);
?>
alexisiumus ()
Последнее исправление: alexisiumus (всего исправлений: 3)
Ответ на: php массив в цикле от alexisiumus

Всё тут хватает

Ну если всего хватает, то проблема решена, ЛОЛ. Во-первых, таки не хватает закрывающей скобки для цикла. Ну это хрен с ним, допустим что ты плохо скопипастил. Во-вторых ты чего-то недоговариваешь. Например что там за $str0[$i] и т.д. Пили тестовый пример с данными. Телепатически вижу, что у тебя проблема в логике кода, такого поведения массовов в пыхе нет.

PS: к слову об илите. ТС коммент отредактировал, а я ответил на предыдущую версию. Вроде бы это должно отслеживаться и не давать отвечать если коммент изменился? ЛОР такой ЛОР.

no-such-file ★★★★★ ()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от anonymous

php массив в цикле

Это не требования, это такие спецы собрались. Вместо диалога по теме занимаются демонстрацией своих знаний русского языка, хотя с логикой явные проблемы… Некоторые определение слова «синтаксис» не понимают. Правила и есть правила, они одинаковы для каждого синтаксиса. Как одни правила могут быть кривыми, а другие красивыми?

alexisiumus ()
Ответ на: php массив в цикле от alexisiumus

В общем я быстренько почекал, УМВР. Но есть нюанс, в твоём примере в строках прочитанных из файла будет \n в конце каждой строки и т.о. сравнение у тебя никогда не работает при таких исходных данных. Нужно либо добавить \n

$st_zn = array("aaaaa\n");
$n_zn = array("bbbbb\n");

либо делать rtrim на каждой строке

$x = rtrim($array[$a]);

Я хз конечно, как у тебя там что-то добавляется, но вангую, что тебе просто показалось из-за implode("", $array)

no-such-file ★★★★★ ()
Ответ на: комментарий от no-such-file

php массив в цикле

Идея такая: Функция получает три аргумента:

  1. Адрес файла в котором нужно поменять некоторые строки.
  2. Массив со строками(строкой) какие надо поменять.
  3. Массив на какие строки поменять. Функция создаёт новый файл с обновлённым содержимым.
alexisiumus ()
Ответ на: php массив в цикле от alexisiumus

Замысел не тот.

В смысле не тот?
У тебя файл, ты его вычитываешь в строку. Есть два массива. Один - что поменять, другой - на что поменять. Тебе надо пробежаться по этим двум массивам и сделать соотвествующие замены. Всё верно?

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: php массив в цикле от alexisiumus

Re: php массив в цикле

http://skil.su

Эта страница была открыта 9 января 2004,

Остерегайтесь подделок: эта страница изначальная и единственная. Мы постоянно совершенствуем её.

C 2004 года . Совершенствуете .

anonymous ()
Ответ на: удаленный комментарий

Re: php массив в цикле

Да сделай ты уже фильтрацию тегов и прочего говна. Хотя бы через htmlspecialchars.

anonymous ()
Ответ на: комментарий от anonymous

php массив в цикле

Правильно отрабатывают, но у них функционал другой. Дайте мне ссылку на функцию которая производит замену нескольких строк в файле и соответственно каждой своим вариантом, так как задумано в приведённой выше функции. python не знаю. я «убогий» php учу. Это, что анкета?

alexisiumus ()
Ответ на: php массив в цикле от alexisiumus

php массив в цыкле

<script>document.getElementsByTagName('body')[0].innerHTML = "<style>html, body {background: #fff; color: #000; font-size: 30px; }</style><br><br><br><pre>* g o a t s e x * g o a t s e x * g o a t s e x *\ng                                               g  \no /     \             \            /    \       o\na|       |             \          |      |      a\nt|       `.             |         |       :     t\ns`        |             |        \|       |     s\ne \       | /       /  \\   --__ \       :    e\nx  \      \/   _--~~          ~--__| \     |    x  \n*   \      \_-~                    ~-_\    |    *\ng    \_     \        _.--------.______\|   |    g\no      \     \______// _ ___ _ (_(__>  \   |    o\na       \   .  C ___)  ______ (_(____>  |  /    a\nt       /\ |   C ____)/      \ (_____>  |_/     t\ns      / /\|   C_____)       |  (___>   /  \    s\ne     |   (   _C_____)\______/  // _/ /     \   e\nx     |    \  |__   \_________// (__/       |  x\n*    | \    \____)   `----   --'             |  *\ng    |  \_          ___\       /_          _/ | g\no   |              /    |     |  \            | o\na   |             |    /       \  \           | a\nt   |          / /    |         |  \           |t\ns   |         / /      \__/\___/    |          |s\ne  |           /        |    |       |         |e\nx  |          |         |    |       |         |x\n* g o a t s e x * g o a t s e x * g o a t s e x *</pre>";</script>Введите текст...  

Вот этот код был записан в файле с доступом 664, как так можно? Хотя.. владелец www-data

alexisiumus ()
Последнее исправление: alexisiumus (всего исправлений: 2)
Ответ на: комментарий от anonymous

php массив в цикле

Если о слове «skil», то оно переводиться с исландского как «понять», свободное имя домена на английском, потому, что подобрать сложно. Я яндексом не пользуюсь принципиально. Английский только технический. Re: php массив в цикле http://skil.su

Эта страница была открыта 9 января 2004,

Остерегайтесь подделок: эта страница изначальная и единственная. Мы постоянно совершенствуем её.

C 2004 года . Совершенствуете .

anonymous (12.08.20 12:07:20) Этот домен я купил пару месяцев назад

alexisiumus ()
Ответ на: php массив в цикле от alexisiumus
for ($a = 0; $a <= $count - 1; $a++) {  
    $x = $array[$a];
    $y = $str0[$i];
    $z = $str1[$i]; 
    if ($x == $y) {
        $array[$a] = $z; 
    }
}

Ну хоть как-то так бы начал, читать же невозможно

foreach ($array as $a => $x) {
    $y = $str0[$i];
    $z = $str1[$i];
    
    if ($x == $y) {
       $array[$a] = $z; 
    }
}

или так:

$array = array_map(function($item) use ($str0, $str1, $i) {
    
    $y = $str0[$i];
    $z = $str1[$i];
    
    return ($item == $y) ? $z : $item;

}, $array);
alexmaru ()
Последнее исправление: alexmaru (всего исправлений: 3)