Gostaria apenas de apresentar meu código neste post.
Fiz algumas pesquisas na internet, algumas variações, e para escolher a conta corrente, tive que deixar como index numérico as keys, para facilitar para o usuário escolher o cliente o qual ele quer executar a operação, vide código abaixo:
<?php
function exibeMensagem(string $mensagem)
{
echo $mensagem .PHP_EOL;
}
function sacar(array $conta, float $valorASacar) : array
{
if ($valorASacar > $conta['saldo']) {
exibeMensagem("Você não tem saldo para sacar este valor, pois seu saldo é de " . $conta['saldo']);
} else {
$conta['saldo'] -= $valorASacar;
}
return $conta;
}
function depositar(array $conta, float $valorADepositar) : array
{
if ($valorADepositar < 0) {
exibeMensagem("Você não pode depositar valor negativo");
} else {
$conta['saldo'] += $valorADepositar;
}
return $conta;
}
function exibeContas($clientes)
{
for ($i = 0; $i < count($clientes); $i++) {
exibeMensagem( 'Índice: ' . $i+1 .
" | CPF:" . $clientes[$i]['cpf'] .
" | Titular:" . $clientes[$i]['titular'] .
" | Saldo: R$" . number_format($clientes[$i]['saldo'], 2, ",", "."));
}
}
$contasCorrentes = [
[
'cpf' => '123.456.789-10',
'titular' => 'Maria',
'saldo' => 10000
],
[
'cpf' => '123.456.789-11',
'titular' => 'Alberto',
'saldo' => 300
],
[
'cpf' => '123.456.789-12',
'titular' => 'Vinicius',
'saldo' => 100
]
];
echo PHP_EOL;
exibeContas($contasCorrentes);
echo PHP_EOL;
$contaEscolhinda = readline("Escolha uma conta para sacar:" )-1;
exibeMensagem(PHP_EOL . "------------------- CONTA ESCOLHIDA -------------------"
. PHP_EOL . PHP_EOL . "CPF:" . $contasCorrentes[$contaEscolhinda]['cpf'] .
" | Titular:" . $contasCorrentes[$contaEscolhinda]['titular'] .
" | Saldo: R$" . number_format($contasCorrentes[$contaEscolhinda]['saldo'], 2, ",", ".")
. PHP_EOL . PHP_EOL . "-------------------------------------------------------" . PHP_EOL);
echo PHP_EOL;
$valorASacarEscolhido = readline( "Quanto você quer sacar: ");
echo PHP_EOL;
$contasCorrentes[$contaEscolhinda] = sacar($contasCorrentes[$contaEscolhinda],$valorASacarEscolhido);
/*$contasCorrentes['123.456.789-10']['saldo'] -= 500;
if (500 > $contasCorrentes['123.456.789-11']['saldo']) {
exibeMensagem("Você não pode sacar este valor."); //TRANSFORMAR ISTO EM FUNÇÃO
} else {
$contasCorrentes['123.456.789-11']['saldo'] -= 500;
}*/
//$contasCorrentes['123.456.789-10'] = sacar($contasCorrentes['123.456.789-10'], 500); //fazer para uma conta especifica
foreach ($contasCorrentes as $cpf => $conta) {
exibeMensagem($cpf + 1 .
" | CPF:" . $conta['cpf'] .
" | Titular:" . $conta['titular'] .
" | Saldo: R$" . number_format($conta['saldo'], 2, ",", "."));
}
echo PHP_EOL;
exibeContas($contasCorrentes);
echo PHP_EOL;
$contaEscolhinda = readline("Escolha uma conta para depositar:" )-1;
exibeMensagem(PHP_EOL . "------------------- CONTA ESCOLHIDA -------------------"
. PHP_EOL . PHP_EOL . "CPF:" . $contasCorrentes[$contaEscolhinda]['cpf'] .
" | Titular:" . $contasCorrentes[$contaEscolhinda]['titular'] .
" | Saldo: R$" . number_format($contasCorrentes[$contaEscolhinda]['saldo'], 2, ",", ".")
. PHP_EOL . PHP_EOL . "-------------------------------------------------------" . PHP_EOL);
echo PHP_EOL;
$valorADepositarEscolhido = readline( "Quanto você quer depositar: ");
echo PHP_EOL;
$contasCorrentes[$contaEscolhinda] = depositar($contasCorrentes[$contaEscolhinda],$valorADepositarEscolhido);
foreach ($contasCorrentes as $cpf => $conta) {
exibeMensagem($cpf + 1 .
" | CPF:" . $conta['cpf'] .
" | Titular:" . $conta['titular'] .
" | Saldo: R$" . number_format($conta['saldo'], 2, ",", "."));
}
O código funciona desta maneira, utilizando keys numéricas, visto que eu tirei a definição da key pelo CPF.
Se eu mantivesse a key como CPF, eu consigo dentro de um foreach ou até de um for, identificar cada um dos elementos dentro do array, para que o usuário escolha através de um número qual cliente ele quer, e retorne para o programa o cliente escolhido através do CPF novamente?
Tentei coisas do tipo:
function exibeContas($clientes)
{
for ($i = 0; $i < count($clientes); $i++) {
exibeMensagem($i . //NÃO ESTÁ FUNCIONANDO
" | Titular:" . $clientes[$i]['titular'] .
" | Saldo: R$" . number_format($clientes[$i]['saldo'], 2, ",", "."));
}
}
Onde eu tirei o CPF (pois não sabia como representar o cpf do cliente dentro de um for (no foreach usamos o $identificador => $identificador2).