2013-08-20 3 views
-1

У меня есть результат из моего запроса db, который выглядит так, когда дамп и запрос делают то, что ожидается, но у меня есть небольшая проблема с получением значений массива. Я использую PHP PDO для получения результата.Как получить значения из многомерного массива

$result = $_stmt->fetchAll(); 
$row = count($result); 

print_r($result); 

Array ([0] => Array ([SUM(od_price * od_qty)] => 69.85 [0] => 69.85) 
     [1] => Array ([SUM(od_price * od_qty)] => 13.97 [0] => 13.97) 
     ) 69.8513.97 

Вы можете видеть, что результат содержит как массив, так и строковые значения. У меня есть возможность получить либо массив, либо строковое значение. Но я бы предпочел получить значения массива, так как значения строк все являются togather. Может кто-нибудь объяснить, что я делаю, это неправильно в цикле foreach?

if($row == 2) 
{    
    foreach ($result as $k) 
    { 
     echo $price_1 = $k[0][0]; // expected 69.85 
     echo $price_2 = $k[0][1]; // expected 13.97 

    }  
    unset($k); 
} 

Мне нужно получить ожидаемые значения, но вместо этого получаю строковые значения, которые являются все togather.

Рассмотрев нижеприведенные решения, вот что я придумал, что хорошо работает для того, что я хотел.

 $result = $_stmt->fetchAll(); 
     $row = count($result); 

     $price = ""; 

     if($row == 2) 
     {    
      foreach ($result as $k) 
      { 
       $price .= $k[0].','; 
      }   
     } 

     // remove the last comma 
     $price = substr($price, 0, -1); 

     list($totalPurchase, $shippingCost) = explode(",",$price); 

     $orderAmount = $totalPurchase + $shippingCost; 

     echo 'The amount is: '.$orderAmount; 
+0

Но все хорошо, вы просто печать значения, так что они появляются. –

ответ

0

заменить петлю с этим:

foreach ($result as $k) // iterate through all datasets 
{ 
    echo $k[0];  // echo price of dataset 
} 
+0

Благодарим за быстрый ответ, но я пробовал это раньше, и он выводит строковое значение 69.8513.97. Мне нужно получить 69.85 и 13.97 отдельно. –

+0

@CarlBarrett Чтобы иметь что-то разделенное, вы также должны выводить разделитель –

1

Попробуйте хранить значения в массиве вместо вторя их ..

$price_1 = array(); $price_2 = array(); 
if($row == 2) 
{    
    foreach ($result as $k) 
    { 
     array_push($price_1, $k[0][0]); // expected 69.85 
     array_push($price_2, $k[0][1]); // expected 13.97 
    }  
// print_r($price_1); //should store all the price1s 
// print_r($price_2); // should store all the price2s. 
// uncomment to these lines to view array contents 
} 
+0

Хорошая идея, и спасибо большое, но ответ не совсем то, что я ищу, см. Решение, добавленное к вопросу выше. –

1

Хотя вы должны научиться многомерные массивы и Еогеасп в чтобы решить эту задачу, вам необходимо использовать fetchAll с небольшим добавлением:

$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0); 
foreach ($result as $k) 
{ 
    echo $k; 
} 
+0

Друг, нет ни одного разработчика, который все знает. Поэтому нет необходимости рассказывать, чему нужно учиться. Ваше решение не помогло. Разработчики иногда получают мозг мертвым и начинают писать мусор, это может случиться с лучшими из нас. Мы приходим на этот сайт, ища идеи, чтобы заставить нас снова задуматься. Daryl Gill предоставил лучшую идею, которая привлекла мое внимание, см. Его решение ниже: –

0

Это уже ответили, но я видел в комментарии, что вы хотите, чтобы они были разделены. Так что просто Concat в "<br>" или новое пространстве линии после эха:

foreach ($result as $k) 
{ 
    echo $k[0]."<br>"; 
} 
+0

Спасибо, что начал мой мозг. Я не знаю, почему я не думал об этом раньше ... (длинная ночь)! Я делал это много раз в своих приложениях, поэтому я добавил к вопросу выше решение проблемы, которая работает хорошо. Надеюсь, это поможет кому-то другому. –

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