Превратить строку в массив в PHP (все данные записываются как строка)

#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 обрабатывает их для таких вещей, как хранение, сравнение и т.д.