массив php и foreach / уникальный массив / push-ключ массива => значение - PullRequest
1 голос
/ 16 декабря 2011

У меня есть цикл в php, который возвращает этот результат:

  • имя 1 => значение х
  • name 2 => значение y
  • имя 3 => значение х
  • name 1 => значение y
  • name 2 => значение 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 => значение x, значение y
  • name 2 => значение y
  • имя 3 => значение х

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 16 декабря 2011

Создайте пустой массив для вывода, затем для каждого входного значения проверьте, существует ли ключ.

$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;
    }
}
0 голосов
/ 16 декабря 2011
$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";
}
0 голосов
/ 16 декабря 2011

Это выглядит ужасно, потому что 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;
}
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...