在PHP中动态填充关联数组

5

我有一个包含以下6个字符串的数组。

user1 A
user2 B
user4 C
user2 D
user1 E

我需要创建一个类似于字典的东西,格式如下:
arr['user1'] => ['A', 'E']
arr['user2'] => ['B', 'D']
arr['user4'] => ['C']

如何在PHP中实现这个功能?

这里有五个字符串! - Lightness Races in Orbit
3个回答

6

这似乎有效...

$arr = array();

foreach($lines as $line) {
    list($user, $letter) = explode(" ", $line);
    $arr[$user][] = $letter;
}

CodePad.


3

以下是您可以做的事情:

$strings = array(
    'user1 A',
    'user2 B',
    'user4 C',
    'user2 D',
    'user1 E',
);

$arr = array();

foreach ($strings as $string) {
    $values = explode(" ", $string);
    $arr[$values[0]][] = $values[1];
}

只要您保证输入的格式固定且有效,这是一个很好的解决方案。 - soulkphp
那么,在使用foreach循环填充数组后,我们如何访问数组名称$arr[$values[0]](也称为array ['user1'],array ['user2']等)的值? - yardpenalty.com
这是我访问嵌套数组名称的方法:foreach($arr as $a => $value) { echo 'array name:'.$a.'\n'; },但如果不在foreach循环中搜索匹配项,该怎么办?例如:$username == $a - yardpenalty.com

1

尝试这个,假设$string是您拥有的值字符串:

$mainArr = array();
$lines = explode("\n", $string);
foreach ($lines as $line) {
    $elements = explode(' ', $line);
    $mainArr[$elements[0]][] = $elements[1];
}
print_r($mainArr);

假设$mainArr是值数组,并且您已经拥有该数组:
$newArr = array(); // Declaring an empty array for what you'll eventually return.
foreach ($mainArr as $key => $val) { // Iterate through each element of the associative array you already have.
    $newArr[$key][] = $val; // Pop into the new array, retaining the key, but pushing the value into a second layer in the array.
}
print_r($newArr); // Print the whole array to check and see if this is what you want.

你需要查看 PHP 中的多维数组:http://php.net/manual/zh/language.types.array.php


这个问题假设输入是一个字符串,而不是多维数组,因此你需要先使用explode或解析它。 - soulkphp
@soulkphp 明白了。从问题来看,我以为这些值已经在一个数组中了。如果不是的话,我已经添加了一种将该字符串解析成数组的方法。 - Stegrex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接