Artigo: Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable - Gigasystems

Blog

Em por

error-php-7-2-count-parameter-must-be-an-array-or-an-object-that-implements-countable
Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable

Se você está recebendo este erro em alguma função que funcionava normalmente e após atualizar sua versão do PHP para 7.2.x e ela te retorna a mensagem “PHP 7.2: count(): Parameter must be an array or an object that implements Countable”, seus problemas acabaram!

Traduzindo o erro, significa que “O parâmetro deve ser uma matriz ou um objeto que implemente Contábil”, ou seja, não nulo. Mas porque isso acontece somente com essa versão?

Nós desenvolvedores sempre sofremos com atualizações, descontinuações, etc. e nesse caso não é diferente. Foi alterada a lógica da função nativa count(), onde na versão do PHP 7.2 é preciso que o $array usado na função count($array) não pode ser um valor NULL.

Para corrigir esse problema é simples (rsrsrs... depois de sofrer 1 dia inteiro para resolver), basta você criar uma variável antes e setar ela com um valor, veja:

//ANTES if (count($this->documents) == 0) { //seu código aqui… } //DEPOIS DO PHP 7.2.X $pkCount = (is_array($this->documents) ? count($this->documents) : 0); if ($pkCount == 0) { //seu código aqui... } 

Primeiro criamos e setamos uma variável e logo a seguir, testamos se ela é um array válido, se for, obtém a quantidade de itens no array, senão, setamos com um valor qualquer, no caso, usei 0 para continuar com a lógica normalmente como era.

Este problema começou a aparecer em testes de desenvolvimento de um e-commerce que estamos desenvolvendo, utilizando como forma de pagamento o PagSeguro, onde parou de funcionar do nada, e depois de vários testes, resolvi subir para hospedagem, sugerido pelo amigo Marcio Sales, e foi batata, lá como ainda estava com 5.6.x funcionava direitinho. Foi ai que resolvi procurar com calma aonde estava o problema e vi essa ressalva, onde coloquei em prática e resolveu o problema, funcionando agora na versão PHP 7.2.

Era isso ai pessoal, espero ter ajudado e lembre-se, o mesmo problema pode acontecer com a função sizeof(), por se tratar de um alias da função count().
 

Olá, deixe seu comentário para Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable

Já temos 89 comentário(s). DEIXE O SEU :)
João Desconhecido

João Desconhecido

Eu usaria

$numeroDeItens = is_countable( $arrayOuObjecto ) ? count( $arrayOuObjecto ) : 0;

ou para quem não conhece esse método simplificado

$numeroDeItens = 0;
if( is_countable( $arrayOuObjecto ) ) {
$numeroDeItens = count( $arrayOuObjecto );
}
★★★★★DIA 05.01.22 19h36RESPONDER
N/A
Enviando Comentário Fechar :/
David Pinheiro

David Pinheiro

Bom dia Marcos! Poderia me ajudar com este código? Tive o problema que voce nos deu a solução, porem ao escrever da forma que voce nos passou, apareceu outro erro... Segue as duas partes do código que contem o count.

if(is_array($erro) && count($erro) == 0 || !isset($erro)){
echo "alert('Login efetuado com sucesso'); location.href='sucesso.php'";
★★★★★DIA 09.09.21 09h33RESPONDER
N/A
Enviando Comentário Fechar :/
marcos heiner

marcos heiner

Poderia me ajudar com esse meu código?
★★★★★DIA 30.03.21 10h56RESPONDER
N/A
Enviando Comentário Fechar :/
Vitor Saraiva

Vitor Saraiva

if(count($social_media)){

$socialmedia = [];

for($i = 0; $i < count($social_media); $i++){

$slug = getSlug($social_media[$i]->icon, $socialmedia);

$social_media[$i]->icon = $slug;

$socialmedia[$slug] = $social_media[$i];

}

Cache::put('social_media', $socialmedia);

return true;

}else{

return false;

}

}
★★★★★DIA 04.02.21 22h58RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Basta adicionar o teste se ele é um array (is_array( )) como abaixo:


if(is_array($social_media) && count($social_media)){
          $socialmedia = [];
          for($i = 0; $i < count($social_media); $i++){
                    $slug = getSlug($social_media[$i]->icon, $socialmedia);
                    $social_media[$i]->icon = $slug;
                    $socialmedia[$slug] = $social_media[$i];
          }
          Cache::put('social_media', $socialmedia);
          return true;
}else{
         return false;
}
}

★★★★★DIA 05.02.21 09h49RESPONDER
N/A
Enviando Comentário Fechar :/
Vitor Saraiva

Vitor Saraiva

Estou com problema no código aparecendo o erro "count(): Parameter must be an array or an object that implements Countable". A partir da linha 175. pode me ajudar estou a semanas tentando a instalação de um script e retorna esse erro de um dos arquivos. obrigado
-----------------------------------
★★★★★DIA 04.02.21 22h56RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia Vitor,


vc deve usar a partir do PHP 7.2.x da seguinte forma:


if(is_array($seu-array) && count($seu-array) > 0){


          //CONTINUA SEU CÓDIGO SE FOR UM ARRAY VÁLIDO COM INFORMAÇÕES DENTRO...



}else{


          //CASO QUEIRA MOSTRAR UM AVISO OU OUTRA COISA SE ELE NÃO TIVER DADOS...


}

★★★★★DIA 05.02.21 09h44RESPONDER
JOAO FONTANA
Enviando Comentário Fechar :/
JOAO FONTANA

JOAO FONTANA

Melhor definição que encontrei. Tinha perdido um dia procurando na documentação isso. Obrigado
★★★★★DIA 22.02.21 16h42RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Douglas Ribeiro

Douglas Ribeiro

Marcos, que conteúdo fantástico. Vim aqui só para agradecer a pessoa que você é, em ajudar tantas e tantas outras pessoas com um post como este. Tenho certeza que você já colhe frutos por ser uma pessoa assim. Parabéns e continue fazendo diferença, trazendo informação e ensinando as pessoas. Queria você como professor. Ensina bem demais, eu que não sei praticamente nada de PHP consegui resolver meu problema aqui. MUITO OBRIGADO de coração!
★★★★★DIA 18.01.21 11h37RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Jacinto Mulungo

Jacinto Mulungo

Maneiro deu certo num outro codigo, mas tenho dificuldade no codigo seguinte:
★★★★☆DIA 08.12.20 09h45RESPONDER
N/A
Enviando Comentário Fechar :/
Andre Wanderley

Andre Wanderley

Valeu... como tenho código legado até hoje... foi útil para mim agora. Muito bem escrito Marcos.
★★★★★DIA 06.12.20 09h24RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Dinho fk

Dinho fk

Muito bom, tava dificil encontrar esta solução
★★★★★DIA 14.11.20 14h03RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Bruno Tozzi

Bruno Tozzi

Bom dia ... me ajuda se for possível? rs Como ficaria este código? Tentei de várias maneiras mas ainda não consegui

function telefone($telefone, $Param_ddd = false) {
global $detect;
global $ddd;
global $prestadora;
$dddLink = ($Param_ddd) ? $Param_ddd : $ddd;
if($detect->isMobile()) {
$telefone = str_replace(array('-', ' ', '(', ')', '_', '*', '.'), '', $telefone);
$dddLink = str_replace(array('(',")"), '', $dddLink);
$prestadora = str_replace(array('(',")"), '', $prestadora);
$telefone = preg_replace('/[^0-9]/', '', $telefone);

$foneLink = ''.trim(substr($telefone, 0, (count($telefone)-5)).'-'.substr($telefone, (count($telefone)-5))).'';
return $foneLink;
} else {
return $telefone;
}
}

DESDE JÁ MUUUITO OBRIGADO
★★★★★DIA 10.11.20 11h11RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia Bruno,


como sua variável TELEFONE é uma string, usa no lugar de count($telefone)-5 o comando strlen($telefone)-5 que creio que dará certo.

★★★★★DIA 10.11.20 11h37RESPONDER
N/A
Enviando Comentário Fechar :/
Bruno Tozzi

Bruno Tozzi

valeeeu meu querido. muito obrigado! vc é monstro
★★★★★DIA 10.11.20 12h41RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Michell Sarno

Michell Sarno

Cara, ajudou muito!!!
Você explicou muito bem o problema e como resolver, eu que não sou um programador PHP, compreendi perfeitamente a sua explicação
Obrigado
★★★★★DIA 03.10.20 13h49RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Kaik Silva

Kaik Silva

meu codigo : $scName = substr($SCList[$i], 1, count($SCList[$i]) - 2);
eu recebo uma mensagem de erro....o que eu faço...?
★★★★★DIA 25.09.20 14h27RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

if(is_array($SCList)){
     $scName = substr($SCList[$i], 1, count($SCList[$i]) - 2);
}else{
     //caso não tenha nada no array vc poderá setar ele com alguma coisa padrão
     $scName = 'teste';
}

★★★★★DIA 25.09.20 14h37RESPONDER
N/A
Enviando Comentário Fechar :/
Cristiano Ramos

Cristiano Ramos

Obrigado pela dica , me ajudou muito !
★★★★★DIA 19.09.20 13h55RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Fabio Vespero

Fabio Vespero

Quanto mais simplista e inteligente, mais produtiva a função se tornará, até que sirva para dar continuidade a está implementação, parabéns pela exemplificação.
★★★★★DIA 18.07.20 11h57RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Leonard Vieira

Leonard Vieira

Como ficaria essa função:

function ExecuteSQL($query, array $params = NULL){

$this->obj = $this->Conectar()->prepare($query);

if(count($params) > 0) {

foreach($params as $key =>$value){

$this->obj->bindvalue($key, $value);
}
}
★★★★★DIA 28.05.20 00h30RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

function ExecuteSQL($query, array $params = NULL){
     $this->obj = $this->Conectar()->prepare($query);
     if(is_array($params) && count($params) > 0) {
          foreach($params as $key =>$value){
               $this->obj->bindvalue($key, $value);
          }
     }
}

★★★★★DIA 01.06.20 11h38RESPONDER
Fabio Vespero, Isaac Huston
Enviando Comentário Fechar :/
Vinicius Pecci

Vinicius Pecci

valeuuuuuuuuuuuuuuuuuuu me salvou muito hahah
★★★★★DIA 27.09.20 19h36RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
thezzari pacheco

thezzari pacheco

Ja consegui resolver, obrigado.
★★★★★DIA 19.05.20 00h47RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
thezzari pacheco

thezzari pacheco

Olá sou iniciante, e estou tendo problemas com o seguinte código,
$compList = aps_get_compare_list();
$pid_count = count($compList);

ficaria muito grato se alguém pudesse me ajudar.
★★★★★DIA 19.05.20 00h43RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia,


não sei o que fazer, mas em suma pode usar isso:


$compList = aps_get_compare_list();
$pid_count = (is_array($compList) ? count($compList) : 0); /* SE FOR UM ARRAY VÁLIDO ELE CONTA OS ELEMENTOS, SENÃO SETA COMO ZERO */

★★★★★DIA 19.05.20 10h02RESPONDER
N/A
Enviando Comentário Fechar :/
Gildo Paruque

Gildo Paruque

Muito obrigado pela ajuda cara!!!
★★★★★DIA 13.05.20 03h42RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Maikon Melo

Maikon Melo

Perfeito, muitíssimo obrigado.
★★★★★DIA 12.05.20 00h03RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Luciano Moreira

Luciano Moreira

O meu aparece esse erro aqui


Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdocs\loja\model\Conexao.class.php on line 41

só que estou usando o phpmyadmin

e seria nessa linha aqui

38 function ExecuteSQL($query, array $params = NULL){
39 $this->obj = $this->Conectar()->prepare($query);
40
41 if (count($params) > 0){
42 foreach($params as $key =>$value){
43 $this->obj->bindvalue($key, $value);
44 }
45 }
46
47 return $this->obj->execute();
48 }
★★★★★DIA 13.04.20 17h03RESPONDER
N/A
Enviando Comentário Fechar :/
lucas santos

lucas santos

Ola estou com o mesmo problema
★★★★★DIA 31.03.20 15h26RESPONDER
N/A
Enviando Comentário Fechar :/
Gustavo Melo

Gustavo Melo

Perfeito, passei algumas horas quebrando a cabeça. Muito obrigado!
★★★★★DIA 26.01.20 21h22RESPONDER
Marcos Martins, Suporte TI
Enviando Comentário Fechar :/
Tonim 90

Tonim 90

Otimo!!!

Muito obrigado!
★★★★★DIA 22.12.19 10h34RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Paulo Diego

Paulo Diego

Salvou a minha noite!
★★★★★DIA 19.12.19 01h32RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Anderson Ferro

Anderson Ferro

Show! Resolvido aqui! Abs!
Anderson Ferro
★★★★☆DIA 11.12.19 20h50RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Fabiano Spada

Fabiano Spada

Opa. gratidão, ajudou muito aqui.
★★★★★DIA 25.11.19 23h26RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Lucas Gomes

Lucas Gomes

BOM DIA, COMO FICARIA COM ESSA FUNÇÃO?

if ($operator if ($operator == 'or' && empty($options['reduce_duplicates'])) {
if (count($value) > 1) {
$operator = 'IN';
}
else {
$value = is_array($value) ? array_pop($value) : $value;
if (is_array($value) && count($value) > 1) {
$operator = 'IN';
}
else {
$operator = '=';
}
}
$add_condition = FALSE;
}
★★★★★DIA 25.11.19 10h41RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Existe duas vezes logo no inicio a comparação se existe $operator =(
★★★★★DIA 25.11.19 13h54RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Lucas Gomes

Lucas Gomes

Então, e está dando erro no OpenAtrium e não estou conseguindo alterar.
★★★★★DIA 25.11.19 15h33RESPONDER
N/A
Enviando Comentário Fechar :/
João Silva

João Silva

Ola Marcos,
Estou com um problema similar neste parametro:



O que sugeria que fizesse aqui? Esta-me a dar voltas a cabeça, sou novo nisto.heheh

O erro que aparece é este:
Error filtering template: Warning: count(): Parameter must be an array or an object that implements Countable in /home/public_html/app/code/MGS/Lookbook/view/frontend/templates/widget/slider.phtml on line 2

Obrigado!
★★★★★DIA 21.11.19 13h32RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Para poder te ajudar, precisa postar aqui a parte do código que dá esse erro, a parte onde vc usa if count($alguma-coisa)

★★★★★DIA 21.11.19 15h02RESPONDER
João Silva
Enviando Comentário Fechar :/
João Silva

João Silva

Ola!
Obrigado pela resposta Marcos.
Colei o codigo completo aqui:
https://pastebin.com/Pf8Fh4Fi

No entanto, a parte do codigo que da o erro é esta mesma (peço desculpa nao coloquei o codigo no post anterior, ou coloquei com o < ? p h p e ele desapareceu :)

Aqui vai:


Obrigado desde ja.
★★★★★DIA 21.11.19 15h27RESPONDER
N/A
Enviando Comentário Fechar :/
João Silva

João Silva

Desapareceu mesmo, desculpe-me este erro, coloquei as tags php:
if($slider && (count($this->getLookbooks())>0)):
★★★★★DIA 21.11.19 15h28RESPONDER
N/A
Enviando Comentário Fechar :/
João Silva

João Silva

Marcos, recebi email de notificação de resposta, no entanto não aparece...correu algo mal?
★★★★★DIA 21.11.19 15h52RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Troca as 2 primeiras linhas por estas 3:


<?php $slider = $this->getSlider() ?>
<?php $pkCount = (is_array($this->getLookbooks()) ? count($this->getLookbooks()) : 0); ?>
<?php if($slider && ($pkCount > 0)): ?>

★★★★★DIA 22.11.19 09h23RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Oliveira

Marcos Oliveira

Fala xará, tudo bem? Excelente conteúdo! Poderia me dar a dica de como ficaria a seguinte função:

if (!count($theme)){
$theme = 'finland';
} else {
$theme = $theme->theme;
}

Obrigado, abraço!

Marcos
★★★★★DIA 19.11.19 10h25RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia,


inverte a comparação e usa o is_array():


if(is_array($theme)){
     $theme = $theme->theme;
}else{
     $theme = 'finland';
}

★★★★★DIA 19.11.19 11h13RESPONDER
Marcos Oliveira
Enviando Comentário Fechar :/
Marcos Oliveira

Marcos Oliveira

Xará, deu um errinho aqui, vou te passar toda a função para você dar uma analisada =)

if (!isset($_SESSION['theme']) || !$_SESSION['theme']){
$theme = $settings->getSetting("theme");
if (!count($theme)){
$theme = 'finland';
} else {
$theme = $theme->theme;
}
} else {
$theme = $_SESSION['theme'];
}

Obrigado pela atenção aplicada, abraço!
★★★★★DIA 20.11.19 11h32RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Boa tarde Marcos,


if (!isset($_SESSION['theme']) || !$_SESSION['theme']){
     $theme = $settings->getSetting("theme");
     if (!is_array($theme)){
          $theme = 'finland';
     } else {
          $theme = $theme->theme;
     }
} else {
     $theme = $_SESSION['theme'];
}

★★★★★DIA 21.11.19 15h12RESPONDER
Marcos Oliveira
Enviando Comentário Fechar :/
andre luiz

andre luiz

meu codigo é de uma extensão do joomla.

o erro é o seguinte
Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdocs\plugins\system\nge_system\nge_system.php on line 115

o codigo é este
// if there is a message, show a notification message
if(count($packageUpdateRecord)) {
$app->enqueueMessage(JText::_( sprintf('There is an update for NextGenEditor to version %sGo to update page', $packageUpdateRecord->version)), 'notice');
}

da um help de como corrigir isso pfv
★★★★★DIA 18.11.19 17h23RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia André,


basta você testar se ele é um array, ao invés de testar se existe algo dentro dele com o COUNT:


if(is_array($packageUpdateRecord)) {
     $app->enqueueMessage(JText::_( sprintf('There is an update for NextGenEditor to version %sGo to update page', $packageUpdateRecord->version)), 'notice');
}

★★★★★DIA 19.11.19 08h31RESPONDER
N/A
Enviando Comentário Fechar :/
matheus aleixo

matheus aleixo

marcus pode me ajudar com esse código? como ele ficaria

if (count($rows) === $this->checkQueryExpected)
★★★★★DIA 31.10.19 13h00RESPONDER
N/A
Enviando Comentário Fechar :/
Sandro Antunes

Sandro Antunes

Bom dia Marcos

Sou estudante e estou desenvolvendo um aplicativo que mostra o erro relatado por vc
A minha linha de código é a seguinte:





Como eu poderia acrescentar as suas observações ?
★★★★★DIA 29.10.19 10h46RESPONDER
N/A
Enviando Comentário Fechar :/
Celso Passos

Celso Passos

Marcos como faço sempre que jogo meu codigo com a expressão que você ensinou, so traz valor zero:
$total = (is_array($livros) ? count($livros): 0);
★★★★★DIA 17.10.19 15h49RESPONDER
Marcos Martins, Celso Passos
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Boa tarde Celso,


se o valor só está chegando ZERO, essa variável $livros não é um array, debuga ela fazendo um var_dump($livros) antes.


 
★★★★★DIA 17.10.19 15h57RESPONDER
Celso Passos
Enviando Comentário Fechar :/
Celso Passos

Celso Passos

object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(9) ["lengths"]=> NULL ["num_rows"]=> int(4) ["type"]=> int(0) }
★★★★★DIA 17.10.19 16h25RESPONDER
N/A
Enviando Comentário Fechar :/
Celso Passos

Celso Passos

Ola Marcos tudo bem? Fiz a mudança para object e continuou o erro, e quando jogo array é como se ele so enxergasse o else 0
★★★★★DIA 18.10.19 08h29RESPONDER
N/A
Enviando Comentário Fechar :/
giga bola

giga bola

ou usa (empty($seuArray))
★★★☆☆DIA 15.10.19 08h59RESPONDER
N/A
Enviando Comentário Fechar :/
Anderson Ribeiro

Anderson Ribeiro

bom dia, como eu faria:
if(count(EncodeExplorer::getConfig("users")) > 0)
★★★★★DIA 03.10.19 10h02RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

$pkCount = (is_array(EncodeExplorer::getConfig("users")) ? count(EncodeExplorer::getConfig("users")) : 0);
if ($pkCount > 0) {
//seu código aqui...
}

★★★★★DIA 03.10.19 10h14RESPONDER
N/A
Enviando Comentário Fechar :/
Anderson Ribeiro

Anderson Ribeiro

Obrigado vou testar.
★★★★★DIA 04.10.19 13h35RESPONDER
N/A
Enviando Comentário Fechar :/
Italo Gervasio

Italo Gervasio

Muito Obrigado! Era o que eu estava procurando!
★★★★★DIA 28.08.19 16h23RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Daniel Mendes

Daniel Mendes

Bom dia. O meu problema é o seguinte e localizei aqui o seu post. Talvez você me ajude. O meu problema é o seginte. Eu fiz um upload de um tema dentro do meu wordpress e aí ele não ativa retornando a seguinte mensagem:

Warning: count(): Parameter must be an array or an object that implements Countable in /home/...../wp-content/themes/ta-meghna/inc/custom-metaboxes/init.php on line 746

E na linha 746 eu tenho:

elseif ( is_array( $meta_box['pages'] ) && count( $meta_box['pages'] === 1 ) )

Na próxima linha, a 747, eu tenho

$type = is_string( end( $meta_box['pages'] ) ) ? end( $meta_box['pages'] ) : false;

Pode, por gentileza, me ajudar e me dizer o que eu troco nessas duas linhas para que funcione?

Grato desde já.
★★★★★DIA 19.08.19 09h12RESPONDER
Italo Gervasio
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Em versões do PHP > 7 você não pode usar o count direto no array, porque se ele não for válido, acusa esse erro Warning: count(). E olha sua instrução abaixo:


elseif ( is_array( $meta_box['pages'] ) && count( $meta_box['pages'] === 1 ) ) 


Você está perguntando se ele for um array E se a quantidade de registros no array for 1... portanto se esse segundo parâmetro estiver vazio, ele dará erro. Sugiro antes de verficar, armazenar num variavel pra depois testar.


elseif{


    $Count = is_array( $meta_box['pages'] ) ? count( $meta_box['pages']) : 0);


     ( aqui continua sua lógica mas comparando agora o $Count, se vai comparar com 0 (vazio), com 1, ou com valores maiores ) 


}


 


 


Apesar que sua escrita está errada:


está assim:


elseif ( is_array( $meta_box['pages'] ) && count( $meta_box['pages'] === 1 ) )


 


correto é assim:


elseif ( is_array( $meta_box['pages'] ) && count( $meta_box['pages']) === 1 )

★★★★★DIA 19.08.19 13h29RESPONDER
N/A
Enviando Comentário Fechar :/
Daniel Mendes

Daniel Mendes

Obrigado. Eu me dei conta. Realmente com a simples remoção do segundo "parêntesis" o erro foi eliminado. Grato.
★★★★★DIA 19.08.19 13h48RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Victor Freitas

Victor Freitas

Muito obrigado pela dica. Me ajudou bastante!
★★★★★DIA 02.08.19 21h13RESPONDER
Leonardo Martins
Enviando Comentário Fechar :/
Diogo Stancke

Diogo Stancke

Marcos. Muito boa a dica, porem sou iniciante. Onde insiro nomeu codigo. Esta dando erro nessa linha.
if ( $elements['page'] > count( $elements['pages'] ) ) { // if the requested page doesn't exist
$elements['page'] = count( $elements['pages'] ); // give them the highest numbered page that DOES exist
}
★★★★★DIA 06.06.19 03h52RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Não sei exatamente o que está fazendo, porém da forma que colocou o código aqui, imagino que esteja comparando as duas variáveis parecidas, porém com um (s) a mais, está certo disso,
se for, precisa primeiro receber o valor para depois você comparar elas, assim:

$pkCount = (is_array($elements['pages']) ? count($elements['pages']) : 0);
if ( $elements['page'] > $pkCount ) {
     $elements['page'] = $pkCount;
}

★★★★★DIA 06.06.19 08h45RESPONDER
Diogo Stancke
Enviando Comentário Fechar :/
Felipe Vargas

Felipe Vargas

Quando se usa $array['valor'] ele não conta e retorna sempre 0, tem alguma solução?
★★★★★DIA 07.05.19 18h35RESPONDER
N/A
Enviando Comentário Fechar :/
Marcos Nunes

Marcos Nunes

Show Marcos... super dica!!!
★★★★★DIA 24.04.19 14h33RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Que bom que está ajudando várias pessoas e obrigado pelo feedback!!!

★★★★★DIA 24.04.19 15h59RESPONDER
N/A
Enviando Comentário Fechar :/
Gustavo Ribeiro

Gustavo Ribeiro

Bom dia Senhores,

Estou fazendo um carrinho de compras no meu primeiro projeto.. o carrinho funcionou puxando os dados na página vercarrinho.php, mas quando fui passar o código para esta máquina que estou, apresenta o erro deste tópico, estou com o mesmo problema usando a versão 7.2.. Esta mostrando o mesmo erro, e dando o erro na linha onde se encontra o count



E no utlimo count estava usando esse count em um if na página vercarrinho.php para finalizar o pedido..


&nbsp;&nbsp;&nbsp; Finalizar Pedido



Gostaria de saber como alterar tudo isso para funcionar esse count no meu carrinho,

Desde ja agradeço!
★★★★★DIA 17.04.19 12h00RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia Gustavo,


só usar esta recomendação deste artigo que vc soluciona seu problema. Só prestar atenção na variável ali e trocar pela sua. Outra coisa, ali eu uso $this->documents porque dentro de uma classe privada, basta você trocar a VAR $this->documents pela sua.

★★★★★DIA 18.04.19 08h35RESPONDER
N/A
Enviando Comentário Fechar :/
Gustavo Ribeiro

Gustavo Ribeiro

Boa tarde Marcos,

Muito obrigado pela ajuda, consegui resolver!!

Revisando e revisando.

Obrigado.
★★★★★DIA 18.04.19 14h28RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Rodrigo Martins

Rodrigo Martins

Olá, meu amigo, parabéns pelo post. Encontrei um erro semelhante em uns módulos do Joomla. O Código é este:


if(count($result)) {
return '&Itemid=' . $result;
}

Como eu resolvo?
★★★★★DIA 04.04.19 09h38RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

//DEPOIS DO PHP 7.2.X


Cria uma variavel auxiliar antes, com uma ternária para armazenar um valor, seja ele do array ou simplesmente o zero, caso o array esteja vazio.
$pkCount = (is_array($result) ? count($result) : 0);


Aqui você coloca sua condição, não sei precisa ser zero ou maior, então você sabendo o que deseja, modifique de acordo com o que precisa abaixo.
if ($pkCount == 0) {
     return '&Itemid=' . $result;
}

★★★★★DIA 04.04.19 09h49RESPONDER
N/A
Enviando Comentário Fechar :/
João Carlos Lopes

João Carlos Lopes

No caso essa minha função ficaria como marcos?

function ExecuteSQL($query, array $params = NULL){
$this->obj = $this->Conectar()->prepare($query);

if(count($params) > 0){
foreach($params as $key =>$value){
$this->obj->bindvalue($key, $value);
}
}

return $this->obj->execute();

Obrigado
★★★★★DIA 22.03.19 15h02RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia João,


você pode usar a função is_array para testar se é um array válido, assim ele funciona em qualquer versão do PHP, pelo menos até o momento.


function ExecuteSQL($query, array $params = NULL){
     $this->obj = $this->Conectar()->prepare($query);
     //AGORA VOCE TESTA SE ELE É UM ARRAY ANTES, DESSA FORMA ELE VAI FUNCIONAR PELO MENOS ATÉ O MOMENTO, EM QUALQUER VERSÃO DO PHP
     if(is_array($params)){
          foreach($params as $key =>$value){
               $this->obj->bindvalue($key, $value);
          }
          return $this->obj->execute();
     }else{
          return "RETORNA O ERRO QUE DESEJA AQUI";
     }

}

★★★★★DIA 26.03.19 09h14RESPONDER
N/A
Enviando Comentário Fechar :/
Jair Deon

Jair Deon

Obrigado pela dica, Marcos.
★★★★★DIA 18.03.19 09h58RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Olá Jair,


que bom que o artigo está ajudando bastante gente!

★★★★★DIA 18.03.19 10h09RESPONDER
N/A
Enviando Comentário Fechar :/
Helmiton Lins

Helmiton Lins

Eu tenho que declarar algo antes?
O meu está dando o seguinte erro:
Fatal error: Uncaught Error: Using $this when not in object context in D:\estudo\vemajudar\home.php:30 Stack trace: #0 {main} thrown

E meu código é simples, ele só conta os registros de um SQL:
$user=get_all_Home();
Fiz o que vc falou:
$pkCount = (is_array($this->$user) ? count($this->$user) : 0);

E deu o erro:
Fatal error: Uncaught Error: Using $this when not in object context in D:\estudo\vemajudar\home.php:30 Stack trace: #0 {main} thrown

Abraço!
★★★★★DIA 23.02.19 11h06RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Bom dia Helmiton,


nesse seu caso, você deve usar assim:


$user=get_all_Home();


$pkCount = (is_array($user) ? count($user) : 0);


Você só deverá usar o $this-> se tiver fazendo seu código numa classe, e ter declarado ela antes dos métodos como private. Se for esse seu caso, ainda sim estaria errado, porque quando usa o $this-> a palavra a seguir, ou seja o nome da variável vai sem o $, ficando $this->user.

★★★★★DIA 25.02.19 10h46RESPONDER
N/A
Enviando Comentário Fechar :/
ricardo l

ricardo l

Valeu, dei sorte de encontrar essa resposta pronta, pois o meu caso também era um código do PagSeguro, igualzinho ao que você colocou.
★★★★★DIA 26.01.19 00h48RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Andre Silva

Andre Silva

Ajudou muito. Valeu.
★★★★★DIA 21.12.18 13h56RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Rodrigo Lopes

Rodrigo Lopes

Obrigado Marcos!!

Me ajudou muito, quebrei a cuca também mas só implementar seu código ao meu e funcionou..

Waleu mesmo!
★★★★★DIA 12.11.18 20h55RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Vinicius Nunes Ferreira

Marcos Vinicius Nunes Ferreira

Me ajudou muito aqui, tinha um sistema que estava na versão 7.1 e não estava dando erros com esta função, me parece que foi a partir da 7.2 mesmo que mudaram. Mas eu já tinha quebrado muito a cabeça tentando corrigir alguns erros aqui. Parabéns e obrigado pela ajuda
★★★★★DIA 21.10.18 23h00RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Petrus Rennan

Petrus Rennan

Fatal error
: Uncaught Error: Using $this when not in object context in C:\xampp\htdocs\aporte\wp-content\themes\aporte\template-parts\planos\planos-loop.php:18 Stack trace: #0 C:\xampp\htdocs\aporte\wp-includes\template.php(690): require() #1 C:\xampp\htdocs\aporte\wp-includes\template.php(647): load_template('C:\\xampp\\htdocs...', false) #2 C:\xampp\htdocs\aporte\wp-includes\general-template.php(155): locate_template(Array, true, false) #3 C:\xampp\htdocs\aporte\wp-content\themes\aporte\single-plano.php(28): get_template_part('template-parts/...', 'loop') #4 C:\xampp\htdocs\aporte\wp-includes\template-loader.php(74): include('C:\\xampp\\htdocs...') #5 C:\xampp\htdocs\aporte\wp-blog-header.php(19): require_once('C:\\xampp\\htdocs...') #6 C:\xampp\htdocs\aporte\index.php(17): require('C:\\xampp\\htdocs...') #7 {main} thrown in
★★★★★DIA 21.09.18 11h42RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

É porque você ao invés de por a sua VARIÁVEL, colocou a minha do exemplo, portanto ela não existe em seu contexto, por isso o erro!


$pkCount = (is_array($this->documents) ? count($this->documents) : 0); // ESTÁ ASSIM NO SITE


$pkCount = (is_array($sua-variavel) ? count($sua-variavel) : 0); // USA A SUA VARIÁVEL


 


Att. Marcos

★★★★★DIA 21.09.18 13h38RESPONDER
N/A
Enviando Comentário Fechar :/
Yuri Bigio

Yuri Bigio

Onde coloco esse código?
★★★★★DIA 31.07.18 08h57RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Marcos Martins

Marcos Martins

Não é onde coloco esse código...


...e sim, se você estiver usando o PHP 7.2.X e por acaso estiver com esse problema "Error PHP 7.2: count(): Parameter must be an array or an object that implements Countable", precisa antes testar se realmente é um array válido, porque agora nesta versão do PHP, o array não pode ser NULL, para obter a quantidade de registros dentro dele. Então basta trocar o exemplo de antes, pelo depois ali no artigo.

★★★★★DIA 31.07.18 09h58RESPONDER
Fabio Vespero, Kaik Silva
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

Veja Também:

Artigos Relacionados a categoria: Blog

Soluções

...CURTIU? AINDA NÃO VIU NOSSO PORTFÓLIO?


Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite, veja agora mesmo nossos Cases de Sucesso e tenha seu site nos padrões atuais preparado para maioria dos dispositivos e navegadores.

Usamos cookies para manter o site seguro, registrar e personalizar sua navegação. Para mais detalhes sobre essa atividade, acesse nossa Politica de Privacidade

Entendi