Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Didi3D

foreach não percorre array

Recommended Posts

Amigos bom dia

 

estou percebendo um mal funcionamento em um Foreach mas como ele não apresenta erro não estou conseguindo localizar a lógica do problema

 

vamos pelo array primeiro que chamo de $res

Array
(
    [0] => Array
        (
            [item1] => 7762839492237333716
            [item1] =>  dados
            [item3] => http://google.com
            [urls] => http://google.com.br
            [data] =>  terça-feira, 6 de maio de 2014 
        )

    [1] => Array
        (
            [item1] => 2850270816776548847
            [item2] =>   dados
            [item3] => http://yahoo.com.br'>http://yahoo.com.br
            [urls] => http://yahoo.com
            [data] =>  terça-feira, 6 de maio de 2014 
        )
)

com ele pego os dados jogo em um foreach pra armazena-los em uma variavel $sql para depois gravar no banco

 

o foreach é o seguinte:

foreach ($res as $result) {
  $serial = $result['item1'];
  $titulo = $result['item2'];
  $link_l = $result['item3'];
  $link_2 = $result['urls'];
  $post   = 'blablabla.';
  $status = '1';
  $data   = $result['data'];
//data atual    
$now = date("Y-m-d H:i:s");    

$url = 'http://localhost/submit_url.php';

//estes seriam os "inputs" do formulário
$campos = array('url' => urlencode($link_2),
        'code' => urlencode("5138679238058982"),);
 
//temos que colocar os parâmetros do post no estilo de uma query string
foreach($campos as $name => $valor) {
    $string_campos .= $name . '=' . $valor . '&';
}
 
$string_campos = rtrim($string_campos,'&');
$ch = curl_init();
 
//configurando as opções da conexão curl
curl_setopt($ch,CURLOPT_URL,$url);
//este parâmetro diz que queremos resgatar o retorno da requisição
curl_setopt($ch,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch,CURLOPT_POST,count($campos));
curl_setopt($ch,CURLOPT_POSTFIELDS,$string_campos);
 
//manda a requisição post
$lnk = curl_exec($ch);
curl_close($ch);    
$link_c = strip_tags($lnk);
 

em seguida como mencionado ainda dentro deste foreach vou alocando os dados aqui

 $sql .= "('$serial','$titulo','$link_l','$link_c','$post','$status','$now','$data'),";

e tudo é gravado no mysql funciona perfeitamente porém na linha do foreach que tem esse código:

$campos = array('url' => urlencode($link_2),

ele deveria pegar todos os valores da key um a um de cada array começando pelo primerio passando segundo e assim como deveria ser e gerar um outro link em tese funciona pois os links armazenados na variável $link_c são todos diferentes porém percebi que todo se referem apenas a key do primeiro array apenas ou seja se houverem 5 arrays com 5 links como google, yahoo, aol, ig e msn ele gera 5 novos mas todos com base no google e ignora as outras ocorrências

 

por aluma razão que não consegui compreender ele não passa para o próximo valor da key do array abaixo ele fixa no primeiro e nada que eu fiz até agora fez com que ele pega-se os valores da key do arrays abaixo dele

 

não estou entendendo esse mal funcionamento do foreach ou minha lógica pois com as outras keys ele faz o serviço sem problemas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se bem entendi, a chave 'urls' não deveria ser um array?

Então ela é uma das keys de cada array e tem um valor mas o foreach só usa o 1º [urls] do primeiro array de cinco keys [item1], [item2], [item3], [urls] e [data]

 

 

Cara onde está o fechamento da chave do primeiro foreach?

ha eu esqueci de por no post aqui mas no script ela existe de boa, tudo ae funciona o problema é que ele não percorre a [urls] dos outros arrays coisa q ele faz perfeitamente com todos os outros [item1], [item2] etc... entendeu =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, se entendi, a estrutura do seu array precisa ser revisada.

 

Explica o que é esse array, ele contém quais informaçõe a respeito do quê?

 

Exemplo: "é uma lista de pedidos que, em cada item, contém uma lista de produtos, onde cada um tem seus respectivos preços de custo e venda".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro Lucas vamos lá

 

o Array é criado a partir de dados vindos de um site de empregos nele eu pego o Titulo[item1], Descrição[item2],O site em si[item3] Link da vaga[urls] e data da postagem[data]

 

faço alguns filtros pois esses dados vem por uma classe simple_html_dom.php que vi alguns exemplos de utilização aqui mesmo no Fórum

 

dae o foreach pega ese array já finalizado com os dados de cada vaga por isso que ele fica da forma que esta no primeiro post:

Array
(
    [0] => Array
        (
            [item1] => 7762839492237333716
            [item1] =>  dados
            [item3] => http://google.com
            [urls] => http://google.com.br
            [data] =>  terça-feira, 6 de maio de 2014 
        )

    [1] => Array
        (
            [item1] => 2850270816776548847
            [item2] =>   dados
            [item3] => http://yahoo.com.br'>http://yahoo.com.br
            [urls] => http://yahoo.com
            [data] =>  terça-feira, 6 de maio de 2014 
        )
)

Então eu quero apenas alterar o valor da chave [urls] por outro gerado na função dentro do foreach, tudo funciona porém percebi que o novo link gerado pela função não pega os outras chaves [urls] aqui eu coloquei apenas 2 arrays cada um com seu valor de [urls] certo ?

 

quando o foreach passa tudo é jogado na variável $sql porém se o primeiro array o [urls] = http://google.com.br na próxima vez que ele passar deveria ser [urls] = http://yahoo.com

 

Ae que esta o problema ele fixa no valor do 1º array [urls] = http://google.com.br então se eu tiver 10 arrays todos eles vão com o link gerado errado porque a função ou o foreach não pegam o valor do próximo [urls] do array abaixo

 

acho que ficou melhor de entender né ? mas qualquer dúvida sugestão ou mudança na estrutura fique a vontade ajuda é bem vinda claro hehehe :-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não ela só existe nesse único lugar em que aparece mesmo ou seja dentro de outro foreach que gera a nova URL com os dados passados do array no caso o [urls].

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só tenho uma coisa a lhe dizer !!

$string_campos = '';  
foreach($campos as $name => $valor) {
    $string_campos .= $name . '=' . $valor . '&';
}

Muito Obrigado Lucas !! Funcionou perfeitamente !!

 

agora compreendi que se a cada loop essa variável não estiver vazia ela não aloca o novo valor do próximo [urls] assim como acontece com os demais e a limpeza foi o que faltava !!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, ele aloca, mas ao final, depois do primeiro valor. Quando você enviava, provavelmente, ele pegava os primeiros valores e ignorava o restante.

 

E se resolveu, marque o tópico como resolvido. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade, ele aloca, mas ao final, depois do primeiro valor. Quando você enviava, provavelmente, ele pegava os primeiros valores e ignorava o restante.

 

E se resolveu, marque o tópico como resolvido. :thumbsup:

 

É Isso ae ! resolvido !! obrigado mais uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.