Ir para conteúdo

POWERED BY:

Arquivado

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

Omar~

Curiosidades

Recommended Posts

Já de início, não é um problema, são apenas curiosidades que me foram perguntadas e não soube responder, logo também não são coisas lógicas é só por questão de entendimento mesmo.

Enfim, o negócio é array.

 

  • Questão 1

Digamos que eu tenhamos o seguinte array:

$arr = [
    0 => 'idx-A',
    1 => 'idx-B'
];

Logo então se quero acessar o primeiro índice basta usar $arr[0];

Tudo certo não é? Mas e se for esse o caso?

$arr = (object) [
    0 => 'idx-A',
    1 => 'idx-B'
];

$arr[0]; //Erro. Porque uma stdClass não pode-se acessar o índice

$arr->0; // Erro. Porque o acesso deveria ser por T_STRING e não T_LNUMBER
$arr->[0]; // Erro no mesmo caso acima de str e int, além de erro de escrita.
 

Agora complicando mais e se esse fosse o array:

$arr = (object) [
    'idx-A',
    'idx-B'
];

 

  • Questão 2

Um arquivo (vou chamar-lo de arr.php) o mesmo possui um array e o retorna dessa forma:

<?php
return [
    'index1' => 'valor A',
    'index2' => 'valor B',
    'index3' => 'valor C'
];

Então em outro arquivo (vou chamar-lo de incluir.php) pegamos o retorno através de um require nomeamos o array

<?php
$arr = require('arr.php')

Então vamos supor que estejamos no index.php

<?php
require('incluir.php');
echo $arr['index1']; // Acessamos então o primeiro índice "valor A"

Tudo certo, não é, então vamos complicar....

Criamos uma função para dar include o que poderia ser uma função que captura valores e faz a inclusão de arquivos conforme for as condições

<?php
function iMasters($parametro) {
    $valor = (isset($parametro) ? $parametro : 'nenhum_valor');
    switch ($valor) {
        case 'alguma_coisa':
            // sei lá
            break;
        default:
            include ('bugado.php');
            break;
    }
}

Então no index eu fazemos a requisição do arquivo e chamamos a função:

<?php
require('incluir.php');
require('iMasters.php'); // Seria o arquivo que contém a função

iMasters(); // No caso a função nessa condições faria o include do arquivo bugado.php

Enfim chegamos a questão. O suposto arquivo bugado.php não reconhece a array  criada anteriormente através de include.

E se tentarmos chamar novamente o incluir.php temos erro de inclusão por causa disso require('arr.php'); transcrito no próprio incluir.php. Então trocamos a questão para require_once('arr.php');

Removemos o erro mas não temos um array de retorno e sim um valor booleano. O que pode ser contatado usando var_dump($arr);

Então porque será que um arquivo que é incluído por uma função não reconhece os valores de outro include?

 

E é isso... Não são problemas, como disse logo no começo por serem coisas sem pé nem cabeça de se fazer, mas são questões que vieram até mim, o que atiçou minha curiosidade também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por marsolim
      Olá a todos. Venho com um probleminha para o qual não encontrei resposta. Talvez, eu não tenha sabido os termos certos para pesquisar. É o seguinte... estou tentando incluir, em uma lista array, índices com valores montados em uma variável a partir de outra array e não estou a conseguir. Atualmente, meu código é o seguinte...
      var ids = {     "joby": "track 01",     "dobby": "track 02",     "medz": "track 03",     "decks": "track 04,     "tecks": "track 05",     "assud": "track 06",     "mand": "track 07",     "daly": "track 08", }; var lstIds = []; for(i in ids){         lstIds[i] =  {         dock: ids[i],         adb: 0,         mdc: 0,         bah: 0,         tek: 0,         dep: 0,         tos: 0     }; }  
      Até aqui ok. É o que tenho no momento. O que estou querendo fazer é colocar, no lugar das linhas de adb: 0 até dep: 0, outra array que criei com esses índices, porque pode ser que eu precise adicionar mais valores e eu quero fazer isso na array nova porque vou usar ela em vários lugares e eu teria que alterar em todos se não fizer essa modificação. Fazendo ela, eu alteraria apenas nela mesmo. Então, agora, com a array nova, seria algo assim:
      var ids = {     "joby": "track 01",     "dobby": "track 01",     "medz": "track 01",     "decks": "track 01",     "tecks": "track 01",     "assud": "track 01",     "mand": "track 01",     "daly": "track 01", }; var juds = ["adb", "mdc", "bah", "tek", "dep"]; //lista nova com os valores var lstIds = []; for(i in ids){         lstIds[i] =  {         dock: ids[i],         adb: 0,         mdc: 0,         bah: 0,         tek: 0,         dep: 0,         tos: 0     }; }  
      O que eu preciso é incluir os valores de juds em lstIds. Da forma que está, não consigo fazer um for dentro do outro for para pegar esses dados e não consigo, também, criar ele fora e inserir com variável, tipo:
      var fJuds = ""; for(i in juds){     fJuds += juds[i] + ": 0,"; } for(i in ids){         lstIds[i] =  {         dock: ids[i],         fJuds // Aqui eu incluiria a variável no lugar das linhas...         tos: 0     }; }  
      Bem, o que eu queria saber mesmo é como eu poderia inserir uma variável no meio duma lista desse tipo... se é possível.
       
      Agradeço pela atenção...
    • Por Willian Simione
      Boa Noite, alguem poderia me ajudar em uma situação, estou tetnando gravar os dados da tela abaixo, porem nao estou conseguindo montar o jeito certo pra ele gravar todos os dados de uma vez

    • Por Millena Oliveira
      Oiii gente, boa noite. Estou estudando ainda e me deram um desafio para desenvolver um programa que imprimisse na tela somente os números primos segundo o valor que o usuário colocasse na execução. Utilizei o readLine para isso. Usei um objeto para que repetisse a execução e salvei todos os números numa array. O problema é, quando faço o teste colocando um número qualquer, retorna uma array vazia. Poderia me dar uma ajuda? Segue abaixo todo o código.
      Obrigada :)
       
      var readline = require("readline"); var rl = readline.createInterface({ input: process.stdin, output: process.stdout }); function desafioPrimos() { var primos = []; rl.question("Digite um número: ", function (num) { console.log(primos); numero = parseInt(num); numerosPrimos: for (var x = 2; x <= num; x++) { for (var y = 2; y < x; y++) { if (x % y === 0) continue numerosPrimos; }; primos.push(x); rl.close(); }; }); }; desafioPrimos();  
    • Por lordzyrium
      Seguinte. Estou tendo dificuldades em criar um array a partir de outro array. E o que preciso é que a saída seja exatamente assim:
      $dados_out = array(     'nome' => 'Nome do Aluno',     'diciplina_notas' => array(         array('PORTUGUÊS', '7ano' => '7,5', '8ano' => '7,0', '9ano' => '8,0'),         array('REDAÇÃO', '7ano' => '8,5', '8ano' => '9,0', '9ano' => '9,0'),         array('HISTÓRIA', '7ano' => '9,5', '8ano' => '8,5', '9ano' => '8,5'),         array('GEOGRAFICA', '7ano' => '7,0', '8ano' => '8,5', '9ano' => '8,0'),         array('QUIMICA', '7ano' => '--', '8ano' => '--', '9ano' => '8,5'),     ) ); A partir deste código:
       
      $dados = array( array( 'nome'=> 'Nome do Aluno', 'etapa'=> '7º ANO', 'pos' => 7, 'not_dados'=> array( array('PORTUGUES', '7,5', '120H', 'AP'), array('REDAÇÃO', '8,5', '40H', 'AP'), array('HISTÓRIA', '9,0', '80H', 'AP'), array('GEOGRAFIA', '7,0', '80H', 'AP') ) ), array( 'nome'=> 'Nome do Aluno', 'etapa'=> '8º ANO', 'pos' => 8, 'not_dados'=> array( array('PORTUGUES', '7,0', '120H', 'AP'), array('HISTÓRIA', '8,5', '80H', 'AP'), array('REDAÇÃO', '9,0', '40H', 'AP'), array('GEOGRAFIA', '8,5', '80H', 'AP') ) ), array( 'nome'=> 'Nome do Aluno', 'etapa'=> '9º ANO', 'pos' => 9, 'not_dados'=> array( array('PORTUGUES', '8,0', '120H', 'AP'), array('HISTÓRIA', '8,5', '80H', 'AP'), array('REDAÇÃO', '9,0', '40H', 'AP'), array('GEOGRAFIA', '8,0', '80H', 'AP'), array('QUIMICA', '8,5', '80H', 'AP') ) ), );  
       
      OBS: terá todas as etapas e as diciplinas não podem ser repetidas.
      Quem puder ajudar desde já agradeço.
       
    • Por MCL_2007
      Boa dia Amigos...
      Tenho esses arrays:
      Array (
      [0] => 2535
      [1] => 2433
      )
      Array (
      [0] =>
      [1] => marcelo@gmail.com;m@terra.com.br
      [2] =>
      [3] => neusa@terra.com.br
      )
       
      Preciso do seguinte resultado de saida:
      2535 - marcelo@gmail.com;m@terra.com.br
      2433 -  neusa@terra.com.br
       
      Como faço , alguem pode me ajudar?
      Gratidao.
×

Informação importante

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