[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка из массива
klf
Есть массив, в котором имеются элементы:
$vozrast $gorod $rost $ves $volosy $glaza

30 | Берлин | 156 | 65 | русые | зеленые
23 | Лондон | 147 | 56 | черные | голубые
28 | Женева | 186 | 87 | рыжие | серые
30 | Лондон | 170 | 78 | русые | зеленые
25 | Варшава | 176 | 97 | черные | серые
30 | Лондон | 170 | 64 | рыжие | голубые

из которого нужно выводить определенные строки
в зависимости от значений, выбранных в форме - $vozrast2, $gorod2 и $rost2.

Как из массива извлечь те строки, элементы которых равны определенным значениям?

Например: в адресной строке передается: www.site.com?$vozrast2=30&$gorod2=Лондон&$rost2=170

Тоесть производитcя выборка из массива и 5-я и 7-я строки записываются в новый массив.

А если в форме не выбраны ни один элемент - в новый массив записываются все строки.

Как это реализовать в компактном виде?
Так как элементов, по которым производится выборка, может быть не 3 а больше.



Спустя 5 минут, 25 секунд (22.01.2012 - 23:26) neadekvat написал(а):
Есть возможность переместить все это дело в СУБД?

Спустя 1 минута, 18 секунд (22.01.2012 - 23:27) klf написал(а):
К сожелению нет возможности использовать базу данных.
Все реализовано на текстовых файлах

Спустя 13 минут, 56 секунд (22.01.2012 - 23:41) neadekvat написал(а):
Быть может, как-то так. Естественно, речь о редактировании одной строки.

$arr = array(
array('age' => '', 'city' => '', 'height' => ''),
array('age' => '', 'city' => '', 'height' => ''),
array('age' => '', 'city' => '', 'height' => '')
);


// ?i=1&age=23&city=piter
$i = (int) $_GET['i'];

// I вариант
$age = (int) $_GET['age'];
$city = addslashes($_GET['city']);
$height = (int) $_GET['height'];

$arr[$i] = array('age' => $age, 'city' => $city, 'height' => $height);

// II вариант:
foreach($arr[$i] as $key => $val)
if (isset($_GET[$key]))
$arr[$i][$key] = addslashes($_GET[$key]);

Спустя 6 минут, 57 секунд (22.01.2012 - 23:48) klf написал(а):
Спасибо конечно, но по-моему здесь не производится проверка равности значений массива ($height, $age, $city)и элементов из адресной строки (?i=1&age=23&city=piter)

Спустя 2 минуты, 28 секунд (22.01.2012 - 23:50) neadekvat написал(а):
Цитата (klf @ 23.01.2012 - 00:48)
Спасибо конечно, но по-моему здесь не производится проверка равности значений массива и элементов из адресной строки

Ах, извините, что я не написал за вас полностью работающую программу под ключ.
Мое дело - подсказать направление, а не решить задачу до логического конца.

К тому же, я так и не вкурил, о чем ты.

Спустя 5 минут, 15 секунд (22.01.2012 - 23:56) klf написал(а):
Спасибо хоть на этом!

Может подскажите еще такой момент:
У меня получается если введены все элементы в форму - выборка происходит корректно, если один из элементов - выборка неправильна.

Как сделать так, чтоби сравнивались не все, а только выбранные элементы?

Буду очень благодрен за помощь!!!

Спустя 5 минут, 25 секунд (23.01.2012 - 00:01) klf написал(а):
Цитата (neadekvat @ 22.01.2012 - 20:50)
К тому же, я так и не вкурил, о чем ты.

В форме выбирается (например):
Возраст - 30
Город - Лондон
Рост - 170

И должны выбираться (записываться в новый массив) спроки, в которых:
Возраст - 30
Город - Лондон
Рост - 170

Если выбран только, например, возраст = 30 -
то вибираются строки со значением возраста = 30, а другие значения тогда не учитываются


Тоесть:

если в форме заполнено поле "vozrast" и поле "rost" ($vozrast != "" && $rost != "")
то проверялось условие:
if($rgChild['vozrast']=='значение' && $rgChild['rost'] == 'значение')

если в форме заполнено только поле "vozrast" ($vozrast != "" && $rost == "")
то проверялось условие:
if($rgChild['vozrast']=='значение')

если в форме заполнено только поле "rost" ($vozrast == "" && $rost != "")
то проверялось условие:
if($rgChild['rost'] == 'значение')

Спустя 34 минуты, 15 секунд (23.01.2012 - 00:35) killer8080 написал(а):
Ну так а в чем проблема? Нужно просто перебрать массив циклом
if(isset($_GET['vozrast2'], $_GET['gorod2'], $_GET['rost2'])){
$result = array();
foreach($data as $row){
if($row['vozrast2'] == $_GET['vozrast2'] && $row['gorod2'] == $_GET['gorod2'] && $row['rost2'] == $_GET['rost2'])
$result []= $row;
}
print_r($result);
}

Спустя 14 минут, 34 секунды (23.01.2012 - 00:50) klf написал(а):
Спасибо!!!

А как сделать чтобы:

еслы в форме заполнено поле "vozrast2", "gorod2" и поле "rost2"
то проверялось условие:
if($row['vozrast2'] == $_GET['vozrast2'] && $row['gorod2'] == $_GET['gorod2'] && $row['rost2'] == $_GET['rost2'])

еслы в форме заполнено только поле "vozrast"
то проверялось условие:
if($row['vozrast2'] == $_GET['vozrast2'])

еслы в форме заполнено только поле "rost"
то проверялось условие:
if($row['rost2'] == $_GET['rost2'])
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.