Как связать массивы или организовать такую структуру хранения, как записи

Кинотавр

Новичок
Как связать массивы или организовать такую структуру хранения, как записи

Из файла читается набор строк, каждая строка состоит из двух элементов с разделителем, например, ";".

Monte Carlo;290
New York;1820
Washington;34
Las Vegas;9839
Frankfurt;834

В общем, читается такой набор строк.

Необходимо, чтобы была какая-то структура данных, чтобы можно было сортировать по второму полю, или делать перемешивание, и чтобы при этом сохранялись сопоставленные элементы. То есть, чтобы после сортировки Washington также был 34, а New York - 1820. И то же самое после перемешивания.
 

alpes

Весь мир на ладони
Ну дык и делай массив: одно из значений ключ, второе значение. А затем сортируй, перемешивай как тебе будет угодно.

ЗЫ. В твоем случее тебя должна заинтересовать ф-ия: [m]parse_ini_file[/m]
 

netdog

net @
PHP:
$str = 'Monte Carlo;290
New York;1820
Washington;34
Las Vegas;9839
Frankfurt;834';

function my_explode($arr){
$arr = explode("\r\n",$arr);

	foreach ($arr as $k=>$v){
    list($name,$nr) = explode(";",$v);
    $m["$name"] = $nr;
    }
return $m;
}

$m = my_explode($str);

asort($m);

print_r($m);
 

alpes

Весь мир на ладони
2Net Dog, тебе еще надо файл считать, и все разом заменяется всего одной строчкой:
PHP:
$m=parse_ini_file("city.ini");
Где city.ini содержит строки:
Monte Carlo = 290
New York =1820
Washington = 34
Las Vegas = 9839
Frankfurt = 834

:D Али ссылку выше не заметил?!
 

netdog

net @
про parse_ini_file я в курсе ...

Я ему показал пример с разделением ; (точки с запятой).
 

Кинотавр

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

>Ну дык и делай массив: одно из значений ключ, второе >значение. А затем сортируй, перемешивай как тебе будет >угодно.

Этот вариант, мне кажется, не катит. Смотри сам, что ты предлагаешь.
$array[290] = "Monte Carlo";
$array[1820] = "New York";
$array[34] = "Washington";
$array[9839] = "Las Vegas";
$array[834] = "Frankfurt";

Неужели ты такое считаешь удачным вариантом?
А если цифровые значения окажутся одинаковыми, тогда что?

Мне кажется, это не подходит.

Нужны именно структуры типа ЗАПИСЬ на Си. Как ее организовать в PHP - вот в чем вопрос.

Или может двумерный массив подойдет?
Что-нибудь типа
$array[0][0] = "Monte Carlo"; $array[0][1] = "290";
$array[1][0] = "New York"; $array[1][1] = "1820";
...
И как-то это все сортировать, чтобы при сортировке по второму элементу и первые тоже оставались в соответствии. Можно что-то подобное организовать?
 

netdog

net @
>А если цифровые значения окажутся одинаковыми, тогда что?

А лучше наоборот
$array[Frankfurt] = "834";


или города тоже могут быть одинаковыми?
 

Кинотавр

Новичок
Города написаны только для примера, вообще-то там должны быть другие лексемы. И они тоже могут повторяться. В любом случае, такой подход - не выход. Нужно более профессиональное решение.
 

netdog

net @
по-ходу оно:
PHP:
<?php

$a[] =  array('city' => 'Monte Carlo', 'number' => 290);
$a[] =  array('city' => 'New York', 'number' => 1820);
$a[] =  array('city' => 'Washington', 'number' => 34);
$a[] =  array('city' => 'Las Vegas ', 'number' => 9839);
$a[] =  array('city' => 'Frankfurt ', 'number' => 834);


function ultra_sort($arr, $col) {
 foreach ($arr as $v) {
 $s[] = $v[$col];
 }
 array_multisort($s, $arr);
 return $arr;
}



$a = ultra_sort($a, "city"); // "city" or "number"

print_r($a);

?>
 
Сверху