2016-11-07 2 views
2

Я пытаюсь подсчитать результат массива, я вернусь из скрипта. Есть два случая, которые я могу получить обратно вариант А являетсяphp array count in with dynamic result

Array ([Id] => 1779 [SupplierId] => 1809 [SupplierName] => cccccc) 

И второй вариант И.Б.

Array ( 
[0] => Array ([Id] => 2020 [SupplierId] => 1809 [SupplierName] => vvv) 
[1] => Array ([Id] => 2058 [SupplierId] => 1809 [SupplierName] => bbb) 
[2] => Array ([Id] => 2063 [SupplierId] => 1809 [SupplierName] => xx) 
) 

если я рассчитывать, чтобы случаях я получить обратно 3 Как я рассчитывать, что в варианте A я вернусь 1, а в варианте B я вернусь 3?

+0

Дани Evan Рубинштейн проверить ответы и отмечающие + вверх-голосования один как принятый ответ. Вы можете также проголосовать за других, если они полезны. Спасибо –

ответ

2

Вы можете создать функцию, как это:

function countRes($arr) { 
    return is_array(end($arr)) ? count($arr) : 1; 
} 

$arr1 = array("Id" => 1779, "SupplierId" => 1809, "SupplierName" => "cccccc"); 

$arr2 = array(array("Id" => 2020, "SupplierId" => 1809, "SupplierName" => "vvv"), 
       array("Id" => 2058, "SupplierId" => 1809, "SupplierName" => "bbb"), 
       array("Id" => 2063, "SupplierId" => 1809, "SupplierName" => "xx")); 

echo countRes($arr1); // 1 
echo countRes($arr2); // 3 

Он проверяет, является ли последний элемент массива и возвращает количество массивов в результирующем массиве. В противном случае он возвращает 1, потому что результирующий массив сам содержит данные.

+0

, что произойдет, если дело: - '$ arr2 = array (array (" Id "=> 2020," SupplierId "=> 1809," SupplierName "=> «vvv»), массив («Id» => 2058, «SupplierId» => 1809, «SupplierName» => «bbb»), «Id» => 2063); '? 'end ($ arr)' не работает, я думаю? –

+0

Ну, ОП не дал такого случая. –

+0

Да, я знаю, но я думаю, что хороший ответ должен покрыть максимальную возможность. Кстати, ваш ответ правильный для OP senario. +1 –

0

Во-первых, комментарий. Методы всегда должны возвращать один и тот же тип объекта. Если вы можете изменить код скрипта, чтобы всегда возвращать массив массивов, сделайте это.

Если вы не можете этого сделать, тогда требуются хакерские решения.

Вы можете использовать TYPEOF оператор PHP, чтобы найти, если элементы первого массива являются целыми числами или более массивов:

http://php.net/manual/es/function.gettype.php

0
$array1 = array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'); 

$array2 = array(
     array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'), 
     array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'), 
     array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc') 
    ); 

// sub arrays with key 
$array3 = array( 
    'first'=>array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'), 
    'second'=>array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'), 
    'third'=>array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc') 
    ); 


echo arrayCount($array3); 


function arrayCount($array){ 
    foreach($array as $key=>$value){ 
     if(is_array($value)){ 
      return count($array); 
     }else{ 
      return 1; 
     } 
    } 
} 
+0

Что произойдет, если второй массив является «ассоциативным многомерным массивом»? '$ array [0]' не будет работать. например: -' $ array2 = array ( 'first' => array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'), 'second' => array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => 'cccccc'), 'third' => array ('Id' => 1779, 'SupplierId' => 1809, 'SupplierName' => > 'cccccc') ); ' –