2017-01-05 2 views
0

Я не знаком с PHP, и мне трудно понять массивы в PHP. У меня есть некоторая проблема для решения, и я пишу простой класс JAVA для его решения, но мне это нужно в PHP. Может ли кто-нибудь помочь мне скрывать этот ниже код PHP?Преобразование простого кода JAVA в PHP (массивы)

Java код:

public static void main(String[] args) { 
     Map<Integer, List<Integer>> outputData = new HashMap<Integer,List<Integer>>(); 
     int[][] inputData = new int[6][2]; 
     inputData[0][0] = 1; 
     inputData[0][1] = 22; 
     inputData[1][0] = 1; 
     inputData[1][1] = 33; 
     inputData[2][0] = 2; 
     inputData[2][1] = 44; 
     inputData[3][0] = 2; 
     inputData[3][1] = 55; 
     inputData[4][0] = 3; 
     inputData[4][1] = 66; 
     inputData[5][0] = 1; 
     inputData[5][1] = 77; 

     // process input data 
     for(int i = 0;i<=5;i++){ 
      if(outputData.containsKey(inputData[i][0])){ 
       List<Integer> list = outputData.get(inputData[i][0]); 
       list.add(inputData[i][1]); 

      }else{ 
       List<Integer> list = new ArrayList<Integer>(); 
       list.add(inputData[i][1]); 
       outputData.put(inputData[i][0], list); 
      } 
     } 

     System.out.println("INPUT DATA DISPLAY"); 
     for(int i = 0;i<=5;i++){ 
      System.out.println("i: "+inputData[i][0] + " = "+inputData[i][1]); 
     } 
     System.out.println("OUTPUT MAP"); 
     for(Integer i : outputData.keySet()){ 
      List<Integer> l = outputData.get(i); 
      System.out.print("i: "+i+" = "); 
      for(Integer j : l){ 
       System.out.print(j + " "); 
      } 
      System.out.println(); 
     } 
    } 

У меня есть входной таблицы:

i: 1 = 22 
i: 1 = 33 
i: 2 = 44 
i: 2 = 55 
i: 3 = 66 
i: 1 = 77 

и мне нужно, чтобы сгруппировать элементы по ключу. Это вывод:

i: 1 = 22 33 77 
i: 2 = 44 55 
i: 3 = 66 

В JAVA он работает, как ожидалось, но в PHP я не могу писать, хотя я читал некоторые учебники, руководства и примеры.

[EDIT]: Настоящая проблема: У меня есть файл excel с N строками (выполняется загрузка excel). Каждая строка имеет 2 столбца.

enter image description here

Я хочу, чтобы сгруппировать так:

  • данные из столбца B должны быть сгруппированы по значению из столбца A.

В этом случае:

  • для значения 1 это будет 123, 63, 3 (строки 1, 2 и 6)
  • для значения 2 будет 3, 23 (строки 3 и 4)
  • значение 3 будет 55, 234 (строки 5 и 7)
+1

Трудно сказать, если это дублировать. Я знаю, что автоматическое преобразование невозможно. Мне нужна помощь для написания на PHP выше логики, реализованной в JAVA, – DarSta

+0

Возможно, вы правы, извините. – DimaSan

ответ

1

Формат входных данных должна быть изменено, потому что в PHP ключи должны быть уникальными. Я тестировал этот код: (это гораздо проще, чем в JAVA) (Таким образом, входной массив ассоциативных массивов.)

<?php 

function groupByKey($input) { 
    $result = array(); 

    foreach($input as $item) { 
     foreach($item as $key => $value) { 
      $result[$key][] = $value; 
     } 
    } 

    return $result; 
} 

$data = array(
    array(1 => 22), 
    array(1 => 33), 
    array(2 => 44), 
    array(2 => 55), 
    array(3 => 66), 
    array(1 => 77) 
); 

print_r($data); 
echo "\n\n"; 

$result = groupByKey($data); 

print_r($result); 

Результаты:

Array 
(
    [0] => Array 
     (
      [1] => 22 
     ) 

    [1] => Array 
     (
      [1] => 33 
     ) 

    [2] => Array 
     (
      [2] => 44 
     ) 

    [3] => Array 
     (
      [2] => 55 
     ) 

    [4] => Array 
     (
      [3] => 66 
     ) 

    [5] => Array 
     (
      [1] => 77 
     ) 

) 


Array 
(
    [1] => Array 
     (
      [0] => 22 
      [1] => 33 
      [2] => 77 
     ) 

    [2] => Array 
     (
      [0] => 44 
      [1] => 55 
     ) 

    [3] => Array 
     (
      [0] => 66 
     ) 

) 
+0

Фактически, в JAVA я проанализировал xls в формате: 'row1, row2, .., rowN'. Каждая строка имеет столбцы: col1, col2. Колонны не уникальны. Я рассмотрю ваш код. Благодарю. – DarSta

Смежные вопросы