使用PHP解析智能搜索

问题描述

我正在使用PHP和jquery构建UI,这将允许某人键入字符串,并且它将搜索apt search

我想做的是将packaga namethe architecture/分开(使用php),紧跟在包和体系结构行的下面这样我就可以将这些数据推送到JSON集合中并将其返回给jQuery。

我正在执行以下命令:

description of the package

我可以在$data=shell_exec("sudo apt search $searchString") 上使用爆炸来获取包名称和体系结构,但不知道如何获得下面的行

以下是此搜索针对/的示例输出:

php

感谢您的帮助!

更新:

我可以使用爆炸的“ /”来获取软件包名称和体系结构,但是我不知道如何获取下面的行。以为我可以找到一个漂亮的解决方案

解决方法

这里有两种方法。

一种方法是使用array_map使用explode(可以改为使用普通的foreach),另一种方法是使用正则表达式。

<?php
$str = 'wwwconfig-common/bionic 0.3.0 all
  Debian web auto configuration

...';
  
  
$packages = array_map(function($item) {
    
    $item = array_map('trim',explode("\n",trim($item)));
    $line = explode(" ",$item[0]);
    $line[0] = explode("/",$item[0]);
    
    return [
        'package' => $line[0][0],'distro' => $line[0][1],'version' => $line[1],'arch' => $line[2],'desc' => $item[1]
    ];
},explode("\n\r",$str));

或使用正则表达式

preg_match_all('#(?<package>.*?)/(?<distro>.*?) (?<version>.*?) (?<arch>.*?)\n  (?<desc>.*?)\n\r#',$str,$packages);
$result = [];
foreach ($packages['package'] as $key => $value) {
    $result[] =  [
        'package' => $packages['package'][$key],'distro' =>  $packages['distro'][$key],'version' =>  $packages['version'][$key],'arch' =>  $packages['arch'][$key],'desc' =>  $packages['desc'][$key]
    ];
}

print_r($result);

两者都会产生相同的结果:

Array
(
    [0] => Array
        (
            [package] => wwwconfig-common
            [distro] => bionic
            [version] => 0.3.0
            [arch] => all
            [desc] => Debian web auto configuration
        )

    [1] => Array
        (
            [package] => xine-ui
            [distro] => bionic
            [version] => 0.99.9-1.3
            [arch] => amd64
            [desc] => the xine video player,user interface
        )

    [2] => Array
        (
            [package] => xjed
            [distro] => bionic
            [version] => 1:0.99.19-7
            [arch] => amd64
            [desc] => editor for programmers (x11 version)
        )

    [3] => Array
        (
            [package] => xmlsysd
            [distro] => bionic
            [version] => 2.6.0-0ubuntu4
            [arch] => amd64
            [desc] => wulfware daemon to extract data from cluster nodes
        )

    [4] => Array
        (
            [package] => yasat
            [distro] => bionic
            [version] => 848-1ubuntu1
            [arch] => all
            [desc] => simple stupid audit tool
        )

    [5] => Array
        (
            [package] => yhsm-validation-server
            [distro] => bionic
            [version] => 1.2.0-1
            [arch] => all
            [desc] => Validation server using YubiHSM
        )

    [6] => Array
        (
            [package] => yrmcds
            [distro] => bionic
            [version] => 1.1.8-1.1
            [arch] => amd64
            [desc] => memcached compatible KVS with master/slave replication
        )

    [7] => Array
        (
            [package] => yubikey-server-c
            [distro] => bionic
            [version] => 0.5-1build3
            [arch] => amd64
            [desc] => Yubikey validation server
        )

    [8] => Array
        (
            [package] => yubikey-val
            [distro] => bionic
            [version] => 2.38-2
            [arch] => all
            [desc] => One-Time Password (OTP) validation server for YubiKey tokens
        )

    [9] => Array
        (
            [package] => zabbix-frontend-php
            [distro] => bionic
            [version] => 1:3.0.12+dfsg-1
            [arch] => all
            [desc] => network monitoring solution - PHP front-end
        )

    [10] => Array
        (
            [package] => zendframework
            [distro] => bionic
            [version] => 1.12.20+dfsg-1ubuntu1
            [arch] => all
            [desc] => powerful PHP framework
        )

)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...