Pare o loop e a saída e, em seguida, continue o php

Ok, acho que é hora de perguntar aqui meu script agora,

Eu tenho um grande conjunto e eu quero ativá-lo e, em seguida, interrompê-lo quando se trata de uma certa quantidade e, em seguida, continuar a loop, aqui está uma amostra do script,

$result_array = array(); $locations = //array of locations coming from a XML SOAP respond; foreach($locations as $loctn){ //Request of the XML, $result = //A large array coming from a XML SOAP respond; foreach($result as $val){ $result_array[] = 'somkey' => $val->identifcator, 'somkey1' => $val->language, 'somkey2' => $val->textSubjectQualifier, 'somkey3' => $val->companyId, //etc. } } print_r($result_array); 

Portanto, a primeira matriz é de uma resposta XML e eu encaminhar novamente com os locais e solicitando novamente do XML e eu encaminhar novamente em uma matriz diferente e, em seguida, quero exibir a última matriz fora do loop,

Mas estou tendo problemas aqui porque é uma matriz muito grande, e se a matriz não é tão grande, ela é boa, mas quando eu quero ampliá-la, não obtive resultado porque o navegador pára,

Eu tentei brincar com a memory, mas não está resolvendo o meu problema, então acho que a melhor maneira seria: eu deveria parar a matriz e, em seguida, emiti-la e continuar a fazer o loop, mas não sei como fazê-lo,

Por favor, ajude-me com isso

Obrigado

Mas estou tendo problemas aqui porque é uma matriz muito grande, e se a matriz não é tão grande, ela é boa, mas quando eu quero ampliá-la, não obtive resultado porque o navegador pára,

parece que você está batendo o tempo limite de execução (assim como o @Haroon mencionado). Você pode querer dar uma olhada no seu registro de erros ou verificar se a solicitação falhou com o status 500 (Erro interno do servidor).

set_time_limit () permite que você (re) configure o tempo limite de execução conforme você. Mas, se seu script estiver executando mais de 30 segundos (o que deve ser a configuração padrão para o tempo limite de execução), você pode querer investigar uma rota alternativa para criar essa matriz.


 foreach($locations as $loctn){ //Request of the XML, $result = //A large array coming from a XML SOAP respond; 

parece que você está puxando dados de um serviço web. Também parece que você pode ser (para um grande conjunto de itens em $locations ) esteja fazendo uma série de solicitações nesse webservice.

O access a serviços web pode ser lento. Se você tem alguma maneira de fazer isso fora do seu processo (“fila de trabalho”, algo com trabalho cron, …) faça isso. Verifique também se os dados fornecidos pelo webservice podem ser armazenados em cache e reutilizados.

 echo str_repeat(' ', 4096); // you need this or something similar, because most of browsers don't print anything if they don't have enough to parse foreach (...) { ... foreach (...) { ... print_r($result_array); flush(); // echo the buffer } } 

Por vezes, o navegador não exibirá nada até receber dados suficientes, é por isso que há str_repeat ().

Do manual do PHP:

flush () pode não ser capaz de replace o esquema de buffer do seu servidor web e não tem efeito em qualquer buffer do lado do cliente no navegador. […]

Os módulos de servidor para o Apache, como o mod_gzip, podem fazer o buffer próprio, o que fará com que o flush () não resulte em dados enviados imediatamente para o cliente.

Mesmo o navegador pode proteger sua input antes de exibi-la . O Netscape, por exemplo, limpa o texto até receber um fim de linha ou o início de uma tag, e não irá renderizar tabelas até que a etiqueta da tabela mais externa seja vista.

Algumas versões do Microsoft Internet Explorer só começarão a exibir a página depois de terem recebido 256 bytes de saída, então você pode precisar enviar espaço em branco extra antes de liberar para que esses navegadores exibam a página.

Tentando consertar seu código:

 echo str_repeat(' ', 4096); $result_array = array(); $locations = //array of locations coming from a XML SOAP respond; foreach($locations as $loctn){ //Request of the XML, $result = //A large array coming from a XML SOAP respond; foreach($result as $val){ $result_array[] = 'somkey' => $val->identifcator, 'somkey1' => $val->language, 'somkey2' => $val->textSubjectQualifier, 'somkey3' => $val->companyId, //etc. print_r($result_array); flush(); } } 

Este código deve imprimir $ result_array em cada loop.