Sem foreach , como posso transformar uma matriz como esta
array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");
para uma corda como esta
item1='object1', item2='object2',.... item-n='object-n'
Eu pensei sobre implode()
, mas não implode a chave com isso.
Se foreach for necessário, é possível não aninhar o foreach?
EDIT: Eu mudei a string
EDIT2 / UPDATE: Esta pergunta foi feita há algum tempo. Naquela época, eu queria escrever tudo em uma linha para usar operadores ternários e fazer chamadas de função incorporadas a ninho em favor de foreach. Essa não foi uma boa prática! Escrever código legível, seja conciso ou não, não importa muito.
Neste caso: colocar foreach em uma função será muito mais legível e modular do que escrever uma linha (mesmo que todas as respostas sejam ótimas!).
Respostas:
e outra forma:
ou:
fonte
echo "Hello, World!";
Devo ver exemplos de código dessas funções?array_fill(0, $input, 'selected-value-you want-to-check-against');
Isso irá gerar uma matriz de mesmo tamanho com valor único para todas as linhas.Você pode usar http_build_query , assim:
Resultado:
Demo
fonte
http_build_query
.http_build_query
emurldecode
evitá-lo.Passei medições (100.000 iterações), que maneira mais rápida de colar uma matriz associativa?
Objetivo: Obter uma linha de 1.000 itens, neste formato: "chave: valor, chave2: valor2"
Temos array (por exemplo):
Teste número um:
Use http_build_query e str_replace :
Tempo médio para implodir 1000 elementos: 0,00012930955084904
Teste número dois:
Use array_map e implode :
Tempo médio para implodir 1000 elementos: 0,0004890081976675
Teste número três:
Use array_walk e implode :
Tempo médio para implodir 1000 elementos: 0,0003874126245348
Teste número quatro:
Use foreach :
Tempo médio para implodir 1000 elementos: 0,00026632803902445
Posso concluir que a melhor maneira de colar o array - use http_build_query e str_replace
fonte
$s = ''; foreach ($array as $k=>$v) { if ($s !== null) { $s .= ','; } $s .= "{$k}:{$v}"; }
supera todos os outros.substr(str_replace('"', '', json_encode($headers)), 1, -1);
http_build_query
substitui os espaços pelo+
caractere mais ( ).Eu usaria
serialize()
oujson_encode()
.Embora não forneça a string de resultado exata que você deseja, seria muito mais fácil codificar / armazenar / recuperar / decodificar mais tarde.
fonte
Usando array_walk
IDEONE
fonte
create_function
vez de apenas usar uma função anônima.mudança
se você quiser reviver toda a corda sem a última $ glue
E o uso:
fonte
Para fins de depuração. Recursive escreve um array de arrays aninhados em uma string. Foreach usado. A função armazena caracteres do idioma nacional.
fonte
Você também pode usar array_reduce do PHP ,
fonte
Para criar mysql onde as condições do array
fonte
Também há var_export e print_r mais comumente conhecidos por imprimir saída de depuração, mas ambas as funções podem receber um argumento opcional para retornar uma string.
Usando o exemplo da pergunta como dados.
Usando
print_r
para transformar a matriz em uma stringIsso produzirá uma representação legível por humanos da variável.
Irá produzir:
Usando
var_export
para transformar a matriz em uma stringQue irá gerar uma representação de string php da variável.
Irá produzir:
Por ser um php válido, podemos avaliá-lo.
Saídas:
fonte
Aqui está um exemplo simples, usando classe:
fonte