За последние 24 часа нас посетили 20415 программистов и 1090 роботов. Сейчас ищет 871 программист ...

преобразовать массив

Тема в разделе "PHP для новичков", создана пользователем Kvandaik, 11 янв 2019.

  1. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Код (Text):
    1. array(53) {
    2.   [0]=>
    3.   string(5) "Fa0/3"
    4.   [4]=>
    5.   string(0) ""
    6.   [5]=>
    7.   string(4) "100M"
    8.   [6]=>
    9.   string(0) ""
    10.   [7]=>
    11.   string(4) "Pair"
    12.   [8]=>
    13.   string(1) "A"
    14.   [12]=>
    15.   string(0) ""
    16.   [15]=>
    17.   string(0) ""
    18.   [16]=>
    19.   string(3) "+/-"
    20.   [17]=>
    21.   string(2) "15"
    22.   [18]=>
    23.   string(6) "meters"
    24.   [19]=>
    25.   string(4) "Pair"
    26.   [20]=>
    27.   string(1) "B"
    28.   [26]=>
    29.   string(6) "Normal"
    30.   [40]=>
    31.   string(1) "
    32. "
    33.   [56]=>
    34.   string(0) ""
    35.   [57]=>
    36.   string(4) "Pair"
    37.   [58]=>
    38.   string(1) "B"
    39.   [62]=>
    40.   string(0) ""
    41.   [63]=>
    42.   string(2) "56"
    43.   [65]=>
    44.   string(0) ""
    45.   [66]=>
    46.   string(3) "+/-"
    47.   [67]=>
    48.   string(2) "15"
    49.   [68]=>
    50.   string(6) "meters"
    51.   [69]=>
    52.   string(4) "Pair"
    53.   [70]=>
    54.   string(1) "A"
    55.   [75]=>
    56.   string(0) ""
    57.   [76]=>
    58.   string(6) "Normal"
    59.   [90]=>
    60.   string(1) "
    61. "
    62.   [106]=>
    63.   string(0) ""
    64.   [107]=>
    65.   string(4) "Pair"
    66.   [108]=>
    67.   string(1) "C"
    68.   [112]=>
    69.   string(0) ""
    70.   [113]=>
    71.   string(3) "N/A"
    72.   [128]=>
    73.   string(0) ""
    74.   [129]=>
    75.   string(4) "Pair"
    76.   [130]=>
    77.   string(1) "D"
    78.   [135]=>
    79.   string(0) ""
    80.   [136]=>
    81.   string(3) "Not"
    82.   [137]=>
    83.   string(9) "Supported"
    84.   [144]=>
    85.   string(1) "
    86. "
    87.   [160]=>
    88.   string(0) ""
    89.   [161]=>
    90.   string(4) "Pair"
    91.   [162]=>
    92.   string(1) "D"
    93.   [166]=>
    94.   string(0) ""
    95.   [167]=>
    96.   string(3) "N/A"
    97.   [182]=>
    98.   string(0) ""
    99.   [183]=>
    100.   string(4) "Pair"
    101.   [184]=>
    102.   string(1) "C"
    103.   [189]=>
    104.   string(0) ""
    105.   [190]=>
    106.   string(3) "Not"
    107.   [191]=>
    108.   string(9) "Supported"
    109.   [198]=>
    110.   string(1) "
    111. "
    112. }
    Чтоб можно было передать sql
     

    Вложения:

    • 00877.jpg
      00877.jpg
      Размер файла:
      35,1 КБ
      Просмотров:
      8
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    в чем проблема ?
     
  3. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Если нужно разбить массив на равные куски, array_chunk() и array_values() вам в помощь.
    Я бы сосредоточился на другом: каким образом формируется данный массив? Можно ли его переделать в более удобный (правильный)? Ну и почистил бы его : пустые строки заменил бы на NULL. Так оно и удобнее будет в дальнейшем и приятнее для глаз.
     
  4. Kvandaik

    Kvandaik Новичок

    С нами с:
    5 июл 2018
    Сообщения:
    121
    Симпатии:
    1
    Данный массив уже не много преобразован, и удалены пробелы которые находились в строках
    Код (Text):
    1. array(4) {
    2.   [11]=>
    3.   string(79) "Fa0/3     100M  Pair A     58   +/- 15 meters Pair B      Normal            
    4. "
    5.   [12]=>
    6.   string(79) "                Pair B     58   +/- 15 meters Pair A      Normal            
    7. "
    8.   [13]=>
    9.   string(79) "                Pair C     N/A                Pair D      Not Supported      
    10. "
    11.   [14]=>
    12.   string(79) "                Pair D     N/A                Pair C      Not Supported      
    13. "
    14. }
    Получаю я инфу от cisco 2960
     
  5. twim32

    twim32 Активный пользователь

    С нами с:
    29 мар 2017
    Сообщения:
    275
    Симпатии:
    58
    Хм... Можно заморочится с preg_match() и сделать именованный массив, это будет правильней (моё скромное личное мнение),
    но раз ты уже всё разбил и кол-во столбцов одинаковое в каждой строке, то вышеперечисленные функции тебе в помощь :)
     
  6. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    @Kvandaik, вы же в курсе, что показанная вами строка - это результат выполнения функции var_dump? Зная это, можно было и правильный запрос в поисковике составить.
    Код ниже мне приписывать не нужно. Проверить в песочнице
    PHP:
    1. <?php
    2. function unvar_dump($str) {
    3.     if (strpos($str, "\n") === false) {
    4.         //Add new lines:
    5.         $regex = array(
    6.             '#(\\[.*?\\]=>)#',
    7.             '#(string\\(|int\\(|float\\(|array\\(|NULL|object\\(|})#',
    8.         );
    9.         $str = preg_replace($regex, "\n\\1", $str);
    10.         $str = trim($str);
    11.     }
    12.     $regex = array(
    13.         '#^\\040*NULL\\040*$#m',
    14.         '#^\\s*array\\((.*?)\\)\\s*{\\s*$#m',
    15.         '#^\\s*string\\((.*?)\\)\\s*(.*?)$#m',
    16.         '#^\\s*int\\((.*?)\\)\\s*$#m',
    17.         '#^\\s*bool\\(true\\)\\s*$#m',
    18.         '#^\\s*bool\\(false\\)\\s*$#m',
    19.         '#^\\s*float\\((.*?)\\)\\s*$#m',
    20.         '#^\\s*\[(\\d+)\\]\\s*=>\\s*$#m',
    21.         '#\\s*?\\r?\\n\\s*#m',
    22.     );
    23.     $replace = array(
    24.         'N',
    25.         'a:\\1:{',
    26.         's:\\1:\\2',
    27.         'i:\\1',
    28.         'b:1',
    29.         'b:0',
    30.         'd:\\1',
    31.         'i:\\1',
    32.         ';'
    33.     );
    34.     $serialized = preg_replace($regex, $replace, $str);
    35.     $func = create_function(
    36.         '$match',
    37.         'return "s:".strlen($match[1]).":\\"".$match[1]."\\"";'
    38.     );
    39.     $serialized = preg_replace_callback(
    40.         '#\\s*\\["(.*?)"\\]\\s*=>#',
    41.         $func,
    42.         $serialized
    43.     );
    44.     $func = create_function(
    45.         '$match',
    46.         'return "O:".strlen($match[1]).":\\"".$match[1]."\\":".$match[2].":{";'
    47.     );
    48.     $serialized = preg_replace_callback(
    49.         '#object\\((.*?)\\).*?\\((\\d+)\\)\\s*{\\s*;#',
    50.         $func,
    51.         $serialized
    52.     );
    53.     $serialized = preg_replace(
    54.         array('#};#', '#{;#'),
    55.         array('}', '{'),
    56.         $serialized
    57.     );
    58.  
    59.     return unserialize($serialized);
    60. }
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Крч..
    Код (Text):
    1. L*******#test cable-diagnostics tdr interface fastEthernet 0/3
    2. Link state may be affected during TDR test
    3. TDR test started on interface Fa0/3
    4. A TDR test can take a few seconds to run on an interface
    5. Use 'show cable-diagnostics tdr' to read the TDR results.
    6. L********#<br>Results:  show cable-diagnostics tdr interface fastEthernet 0/3
    7. TDR test last run on: January 09 13:40:26
    8.  
    9. Interface Speed Local pair Pair length        Remote pair Pair status
    10. --------- ----- ---------- ------------------ ----------- --------------------
    11. Fa0/3     100M  Pair A     58   +/- 15 meters Pair B      Normal        
    12.                 Pair B     58   +/- 15 meters Pair A      Normal        
    13.                 Pair C     N/A                Pair D      Not Supported  
    14.                 Pair D     N/A                Pair C      Not Supported      
    PHP:
    1. <?php # lathe MouseZver
    2.  
    3. $input = file ( 'result.txt' );
    4.  
    5. $len = array_map ( 'strlen', explode ( ' ', array_slice ( $input, 9, 1 )[0] ) );
    6.  
    7. $a = [];
    8.  
    9. foreach ( array_slice ( $input, 10 ) AS $k => $v )
    10. {
    11.     $i = 0;
    12.  
    13.     foreach ( $len AS $n )
    14.     {
    15.         if ( !$k )
    16.         {
    17.             $a['key'][] = trim ( substr ( array_slice ( $input, 8, 1 )[0], $i, $n ) );
    18.         }
    19.    
    20.         $a[$k][] = trim ( substr ( $v, $i, $n ) );
    21.    
    22.         $i += (++$n);
    23.     }
    24. }
    25.  
    26. $keys = implode ( '`, `', array_shift ( $a ) );
    27.  
    28. printf ( "INSERT INTO `table`( `%s` ) VALUES ( '%s' )", $keys, implode ( "' )," . PHP_EOL . " ( '", array_map ( function ( $column )
    29. {
    30.     return implode ( "', '", $column );
    31. }, $a ) ) );
     
    #7 MouseZver, 11 янв 2019
    Последнее редактирование: 11 янв 2019