我在php中有一个循环,返回这个结果:
- name 1 => value x
- name 2 => value y
- name 3 => value x
- name 1 => value y
- name 2 => value y
我想创建一个像这样的数组:
$myarray=array('name 1' =>'value x, value y','name 2'=>'value y',name 3=>'value x')
对于这个数组,我可以这样操作:
foreach($myarray as $key=>$item){
echo $key.'=>'.$item;
}
结果:- name 1 => value x,value y
- name 2 => value y
- name 3 => value x
我该怎么做?
看起来很糟糕,因为php没有原生列表。当键可以相同时,不应该使用hashmap(关联数组)。我还没有测试过以下内容,但是像这样:
<?
$arr = Array(
Array('n1',Array('x','y'))
, Array('n2',Array('x'))
, Array('n3',Array('y'))
);
foreach($arr as $value){
list($name,$values) = $value;
foreach($values as $value){
echo "$name -> $value".PHP_EOL;
}
}
?>
为输出创建一个空数组,然后对于每个输入值检查键是否已经存在。
$result = array();
foreach($myarray AS $key=>$value) {
if(array_key_exists($key, $result)) {
// if the key exists in $result, add the value to the existing value
$result[$key] += ', ' + $value;
} else {
// otherwise, just create it
$result[$key] = $value;
}
}
$array2 = array();
foreach ( $original_array as $key => $value )
{
// Edited to address @adam's comment
if ( !array_key_exists( $key, $array2 ) ) $array2[$key] = array();
$array2[$key][] = $value;
}
foreach ( $array2 as $key => $values )
{
$values_str = join( ', ', array_unique( $values ) );
print "$key => $values_str";
}