#php #oop #multidimensional-array
#php #ооп #многомерный массив
Вопрос:
Я хочу иметь multidim. массив, подобный этому:
array {[RECORD1] => array {
[ID]=>"0001",
[Name]=>"John",
[Address]=>"Street No...."
}
[RECORD2] => array {
[ID]=>"0002",
[Name]=>"Jane",
[Address]=>"Street No...."
}
}
Мне удалось создать такой код, как этот:
$st = $conn->prepare("SELECT * FROM table WHERE c_id=?");
$au='array(';
foreach ($_SESSION['cid'] as $cr){
$st->execute(array($cr));
$rws = $st->fetchAll(PDO::FETCH_ASSOC);
foreach ($rws as $rw){}
$au.='"a'.$cr.'"=>array('; //Record01
$au.='"id"=>"'.$rw['c_id'].'",';
$au.='"name"=>"'.$rw['c_name'].'"';
$au.='),';
}
$au=trim($au,',');
//substr($au,0,-1);
$au.=');';
результатом является строка, но с содержимым массива.
Второй вопрос: лучше ли использовать ООП для выполнения того, что я хочу?
Что мне нужно: После того, как я выберу некоторые «записи» (которые можно удалить / добавить позже), я интегрирую их на страницу сравнения. Этот массив / класс должен быть достаточно гибким, чтобы я мог легко изменять его (при добавлении / удалении записей). Я думал, что с помощью массивов я могу легко удалить / добавить «запись».
Спасибо.
Комментарии:
1. О чем вы на самом деле спрашиваете? PHP поддерживает многомерные массивы «из коробки». Что касается вашего кода, мне интересно, что вы пытаетесь сделать и как вы пришли к этому решению….
2. Возможно, ответ заключается в том, чтобы просто указать вам на документацию по массиву .
3. То, что вы сейчас создаете, вовсе не массивы. Это строка, не больше, не меньше. То, что в нем есть слово «массив», каким-то образом не делает его массивом.
4. Вы заметили, что цикл
foreach ($rws as $rw){}
немедленно заканчивается?$rw
никогда не будет действительным.5. Ладно, пора прекращать кодирование. Пожалуйста, прочтите документацию и руководства, прежде чем идти дальше . Кажется очевидным, что, по крайней мере, когда дело доходит до PHP, вы не знаете / понимаете, что делаете, и практически нажимаете случайные клавиши и надеетесь, что все сработает.
Ответ №1:
предполагая, что у вас есть один cid в $_SESSION['cid']
, вы могли бы использовать;
$sSQL = 'SELECT c_id, c_name, c_address FROM table WHERE c_id=:c_id';
$st = $conn->prepare($sSQL);
$st->bindValue( 'c_id', $_SESSION['cid'], PDO::PARAM_INT );
$st->execute();
// create results array
$aResults = array();
// while there are rows to get, loop over and store results in array
while($row = $st->fetch()){
$aResults[$row['c_id']] = array('Name'=>$row['c_name'], 'Address'=>$row['c_address']);
}
Комментарии:
1. Ценю вашу поддержку, в отличие от других! Для меня это выглядит как правильный подход. Да, я заметил, что сделал неправильно: в массив можно помещать только переменные, но никогда всю «строку» в качестве переменной.
2. Вообще никаких проблем. Да, вы создаете то, что вы визуально видите как структуру массива в виде строки. Все еще впечатлен, что вам это удалось. Ознакомьтесь с типами данных и тем, как php обрабатывает их для таких вещей, как хранение, сравнение и т.д.