2014-11-02 6 views
0

Я пытаюсь сосчитать элементы в массиве, но doens't работы по назначению:PHP - подсчет элементов в массиве

У меня есть время цикл, который перебирает мою таблицу пользователей:

while($refsData=$refs->fetch()){ 
    $new_array = array($refsData['id']); 
    print_r($new_array); 

     $outcome = $rentedrefs->_paying($new_array); 
    } 

print_r($new_array); дает мне:

Array 
(
    [0] => 90427 
) 
Array 
(
    [0] => 90428 
) 
Array 
(
    [0] => 90429 
) 
Array 
(
    [0] => 90430 
) 
Array 
(
    [0] => 90431 
) 
Array 
(
    [0] => 90432 
) 
Array 
(
    [0] => 90433 
) 
Array 
(
    [0] => 90434 
) 
Array 
(
    [0] => 90435 
) 
Array 
(
    [0] => 90436 
) 

Внутри функции _paying, подсчитать число значений из массива:

function _paying($referrals_array){ 

echo count($referrals_array); 


} 

Проблема заключается в том, что выше count($referrals_array); просто дает мне: 1, когда он должен быть 10

Что я делаю неправильно?

+0

На каждой итерации цикла 'while' вы переписываете' $ new_array'. –

+0

Ваш массив возвращает только один элемент. Посмотрите на свой результат. Каждый массив - Array [0]. –

ответ

2

Вы создаете новый массив на каждом шаге цикла. Вместо этого она должна быть написана так:

$new_array = array(); 
while($refsData=$refs->fetch()){ 
    $new_array[] = $refsData['id']; 
    // print_r($new_array); 
} 

$outcome = $rentedrefs->_paying($new_array); 

Обратите внимание, что я переехал _paying вызов вне цикла, как представляется, функция агрегирования. Если нет, вы, скорее всего, сделаете его обработкой $refsData['id'], а не целым массивом.

Как Замечание, я настоятельно рекомендую использовать fetchAll() метод (вместо того, чтобы принести, когда вам нужно заполнить коллекцию с результатами запроса. Это будет тривиально посчитать количество полученного массива.

+0

Цикл while, который я показал в вопросе, на самом деле представляет собой вложенный цикл. Значение есть другой цикл while вне этого цикла. Будет ли это проблемой, если я помещаю $ result вне этого вложенного цикла, но в первый цикл? – oliverbj

+0

Вы не показывали внешний цикл, но, как я его вижу, код, который я показал, является прямой заменой тому, что у вас есть на данный момент. – raina77ow

0

Он работает должным образом, в каждом обращении петли у вас есть один массив, так что в первом у вас есть:

Array 
(
    [0] => 90427 
) 

в второй:.

Array 
(
    [0] => 90428 
) 

и так далее

Он должен работать правильно:

var $count = 0; 
while($refsData=$refs->fetch()){ 
    $new_array = array($refsData['id']); 
     $count += count($new_array);  
     $outcome = $rentedrefs->_paying($new_array); 
    } 
0

Вы создаете $new_array как новый массив с одним элементом $refsData['id']. Поэтому число 1 является правильным.

Чтобы получить количество результатов, либо использовать COUNT(*) выберите, чтобы задать свой сервер SQL, или добавить счетчик на свой цикл, как это:

$entries = 0; 
while($refsData=$refs->fetch()){ 
    $new_array = array($refsData['id']); 
    print_r($new_array); 
    $entries++; 

    $outcome = $rentedrefs->_paying($new_array); 
} 

echo $entries; 
+0

Это дает мне «100», когда я повторяю $ entries – oliverbj

+0

Тогда у вас есть 100 результатов, я думаю. – andy

+0

В таблице всего 10 строк. – oliverbj

0

Вы не добавлять элементы в массив, но создавая новый массив для каждой итерации. Чтобы добавить элементы, просто выполните:

$new_array[] = $refsData['id']; 
Смежные вопросы