简体   繁体   English

对于从关联数组中获取键和值的每个键和值,如果它们共享相同的键名,则不会返回所有键和值 - PHP

[英]For each to get keys and values from associative array doesn't return all keys and values if they share the same key name - PHP

I'm reading a file that has this text:我正在阅读一个包含此文本的文件:

Vélez Sarsfield|Zárate, Mauro|8|0|0|1|9
Estudiantes|Carrillo, Guido|5|1|0|2|8
Boca Juniors|Gigliotti, Emanuel|3|2|0|2|7
River Plate|Carbonero, Carlos Mario|4|2|0|0|6
Arsenal|Echeverría, Mariano|6|0|0|0|6
Olimpo|Valencia, José Adolfo|6|0|0|0|6
River Plate|Cavenaghi, Fernando Ezequiel|4|0|0|2|6
Boca Juniors|Riquelme, Juan Román|1|0|1|3|5

This is my code:这是我的代码:

 <?php
            $handle = fopen("tp7-datos-goleadores.txt", "r");
            if ($handle) {
                while (($line = fgets($handle)) !== false) {
                    // process the line read.
                    //hago el asociativo
                    $porciones = explode("|", $line );
                    $arrAsociativo[$porciones[0]] =  $porciones[6];
                }
            
                fclose($handle);
            } else {
                echo "error al leer el archivo";
            } 

            foreach($arrAsociativo as $x => $x_value) {
                echo "Key=" . $x . ", Value=" . $x_value;
                echo "<br>";
            }
    ?>

But it returns this on the html:但它在 html 上返回这个:

Key=V�lez Sarsfield, Value=9
Key=Estudiantes, Value=8
Key=Boca Juniors, Value=5
Key=River Plate, Value=6
Key=Arsenal, Value=6
Key=Olimpo, Value=6

As you can see, i have 2 Boca Juniors and 2 River Plate on my original text, but i only get one from each when i go through the array.如您所见,我的原始文本中有 2 个 Boca Juniors 和 2 个 River Plate,但是当我遍历阵列时,我只能从每个中得到一个。 Why is that?这是为什么?

You could echo out your indexes through a loop.您可以通过循环回显您的索引。 Or alternatively, just create a new array with couplets.或者,只需创建一个带有对联的新数组。

<?php

$data =<<<DATA
Vélez Sarsfield|Zárate, Mauro|8|0|0|1|9
Estudiantes|Carrillo, Guido|5|1|0|2|8
Boca Juniors|Gigliotti, Emanuel|3|2|0|2|7
River Plate|Carbonero, Carlos Mario|4|2|0|0|6
Arsenal|Echeverría, Mariano|6|0|0|0|6
Olimpo|Valencia, José Adolfo|6|0|0|0|6
River Plate|Cavenaghi, Fernando Ezequiel|4|0|0|2|6
Boca Juniors|Riquelme, Juan Román|1|0|1|3|5
DATA;

$lines = preg_split('/\R/', $data);
foreach($lines as $line) {
    $rows[] = str_getcsv($line, '|');
}    

foreach($rows as $row) {
    $name_values[] = [$row[0], $row[6]];
}

foreach($name_values as list($name, $value)) {
    echo 'Name: ', $name, ', Value: ', $value, "\n";
}

Output:输出:

Name: Vélez Sarsfield, Value: 9
Name: Estudiantes, Value: 8
Name: Boca Juniors, Value: 7
Name: River Plate, Value: 6
Name: Arsenal, Value: 6
Name: Olimpo, Value: 6
Name: River Plate, Value: 6
Name: Boca Juniors, Value: 5

And the data structure of $name_values:以及 $name_values 的数据结构:

var_export($name_values);

Output:输出:

array (
  0 => 
  array (
    0 => 'Vélez Sarsfield',
    1 => '9',
  ),
  1 => 
  array (
    0 => 'Estudiantes',
    1 => '8',
  ),
  2 => 
  array (
    0 => 'Boca Juniors',
    1 => '7',
  ),
  3 => 
  array (
    0 => 'River Plate',
    1 => '6',
  ),
  4 => 
  array (
    0 => 'Arsenal',
    1 => '6',
  ),
  5 => 
  array (
    0 => 'Olimpo',
    1 => '6',
  ),
  6 => 
  array (
    0 => 'River Plate',
    1 => '6',
  ),
  7 => 
  array (
    0 => 'Boca Juniors',
    1 => '5',
  ),
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM