2011-02-01 4 views
1
<?php 

/* SC: Shop Category */ 
$SCStatement = "SELECT * FROM shop_categories"; 
$SCQuery = mysql_query($SCStatement); 

while($SCFetch = mysql_fetch_array($SCQuery)){ 
    $SCItems[] = array(
     'id' => $SCFetch['id'], 
     'name' => $SCFetch['cat_name'], 
     'desc' => $SCFetch['cat_description'] 
    ); 
} 

$SCNumCols = 2; 
$SCNumItems = count($SCItems); 
$SCNumRows = ceil($SCNumItems/$SCNumCols); 



function bindArrayToObject($array) { 
    $return = new stdClass(); 
    foreach ($array as $k => $v) { 
     if (is_array($v)) { 
      $return->$k = bindArrayToObject($v); 
     } 
     else { 
      $return->$k = preg_replace ('/<[^>]*>/', '', $v); 
     } 
    } 

    return $return; 
} 

$newObject = bindArrayToObject($SCItems); 

echo $newObject->name; 

?> 

Данные, которые я извлекаю из базы данных, хранятся в массиве $ SCItems []. Проблема в том, что когда я возвращаю $ newObject-> name; ничего не появится. Что добавить этот код для отображения данных с помощью $newObject->name; Заранее спасибо.Многострочный массив PHP - повторение значения ключа массива с использованием объекта

+1

Что вы пытаетесь достичь? вы связываете более чем одну строку с объектом позже, в результате вы получите только последнюю строку. вам нужен массив объектов. Существует много логических ошибок: –

+0

FYI, при получении из базы данных, если вы хотите переименовать столбцы в нечто другое, вы можете напрямую запросить это: 'SELECT id, cat_name как имя, cat_description как desc FROM shop_categories' – naiquevin

ответ

0

Ну, судя по этому коду, что у вас есть что-то вроде

 
$SCItems = Array(
0 => Array(
    'id' => 1, 
    'name' => 'name 1', 
    'desc' => 'description 1' 
), 
1 => Array(
    'id' => 2, 
    'name' => 'name 2', 
    'desc' => 'description 2' 
), 
); 

А потом от вашей bindArrayToObject функция пытается построить объект

 
$newObject = new stdClass(); 
$newbject->0 = new stdClass(); 
$newbject->0->id = 1; 
$newbject->0->name = 'name 1'; 
$newbject->0->desc = 'description 1'; 

$newbject->1 = new stdClass(); 
$newbject->1->id = 2; 
$newbject->1->name = 'name 2'; 
$newbject->1->desc = 'description 2'; 

Итак, что вы, вероятно, следует сделать представляет собой цикл над вашими «$ SCItems», а затем при каждом использовании записи bindArrayToObject

таких как

 
$SCObject = Array(); 
foreach($SCItems as $SCItem) { 
$SCObjects[] = bindArrayToObject($SCItem); 
} 

Оттуда вы должны быть в состоянии получить доступ $SCObjects[0]->name, который сделал бы гораздо больше смысла для меня

+0

Большое спасибо Якоб Нильссон-Эле, ваш герой – Kirk

Смежные вопросы