Помогите,перезапись элемента массива.

Печать / RSS
19

Е

Пришелец
0
Народ помогите нужно перезаписать только один элемент массива...массив вида
10:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:10
11:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:11
12:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:-:||:12

Подскажите код

Господин ПЖ
0
что именно из этого массив элемент между :||: в строке или в файле?
Е

Пришелец
0
массив в txt файле хранится,элементы между сплитом. вот такой код получился,но почему то перезаписывает элемент в первый символ.Что не так подскажите.
$x=(int)$_GET['x'];  $y=(int)$_GET['y'];
if($_GET['select']!='' and is_file($cms.'img/part_map/'.$_GET['select'])){
$intmaps=@file($cms.'world/data/map/map.txt');
$count=count($intmaps); //подсчитываем количество строк
$line_map=$x; // строка
for($i=0;$i<$count;$i++) //создаём цикл,кол-во оборотов = количиству строк
{
if($i!=$line_map){fwrite($fp,$file[$i]);}else{
$fmap=explode(":||:",$intmaps[$x]);
$selest_part=$_GET['select'];
$selest_part=substr($selest_part,0,-4);
$fmap[$y]=$selest_part; $intmaps[$x]=implode(":||:",$fmap);
$fp=fopen($cms.'world/data/map/map.txt',"w"); //очищаем файл
foreach($intmaps as $key => $value){
if($value!=""){@fputs($fp,$value);}}
}
}fclose($fp); //закончили работать с файлом

Оранжевые штаны
0
1. dzhems, я думаю если ты объяснишь более подробно что тебе надо, то помощь получишь намного быстрее.
Выложи пример файла, размером 5 строк с самого начала и между какими символами вставлять\заменять.

Господин ПЖ
0
3. dzhems, я не могу понять это полностью массив или строки, если полностью почему тогда переводы строк
в какой именно строке тебе нужно поменять и какой именно элемент

то что ты написал это не массив это обычная строка (string)
Изменил: Вантуз-мен (16.06.2015 / 11:39)

Господин ПЖ
0
В старом моторе были неплохие функции для работы с такими видами данных в файлах
к примеру https://github.com/visavi/wap-motor/blob/master/includes/functions.php#L275
поиск элемента в строках возвращает данные строки массив и номер строки
только замени сепаратор с | на то что тебе нужно в твоем случае :||:

https://github.com/visavi/wap-motor/blob/master/includes/functions.php#L294
Чтение строки из файла передаешь номер строки возвращается массив (тоже поменяй сепаратор)

ну и замена строки в файле
https://github.com/visavi/wap-motor/blob/master/includes/functions.php#L239
Е

Пришелец
0
6. Vantuz, Спасибо буду разбираться.

Господин ПЖ
0
7. dzhems, на работе задач не было вот быстренько накидал https://github.com/visavi/flystring
можешь через композер установить
Е

Пришелец
0
5. Vantuz, Массив-матрица 20 на 20 к примеру...в 15 строке 16 ячейку меняем...Всё остальное не изменяется соответственно
Изменил: Евгений (16.06.2015 / 18:04)

Господин ПЖ
0
Тем классом что я написал будет вот так
<?php
$fly = new Visavi\FlyString('test.txt', ':||:');

$string = $fly->read(15);

$string[16] = 'new value';
array_pop($string);

$fly->replace(15, $string);

только учти что нумерация начинается с нуля, тебе скорее всего нужно 14 и 15

я потом оптимизирую чтобы массив возвращался без перевода строки и не нужно было удалять последний элемент array_pop($string);
или вообще сделаю метод замены ячейки в строке

Но сейчас я хочу переписать чтобы открытие файла происходило не через file, а через fopen и уже там управлять курсором, это более безопасно, сэкономит память и можно будет работать с большими файлами

но к твоей задаче это не относится
Изменил: Вантуз-мен (16.06.2015 / 18:40)
Для выполнения действия необходимо авторизоваться!
Стикеры / Теги / Правила / Топ тем / Топ тем / Поиск