简体   繁体   English

如何更好地编写此脚本? 从 PHP 中的数组中搜索和提取值

[英]How can I code this script better? Search & extract values from an array in PHP

I managed to write the following function which took me all afternoon.我设法写了以下 function 花了我整个下午。 I used various sources and managed to cobble something together.我使用了各种资源并设法拼凑出一些东西。 I'm a newbie.我是新手。 It works, but I'm sure it can be coded better and more efficiently.它有效,但我确信它可以更好、更有效地编码。 If anybody has any ideas..如果有人有任何想法..

Here is my array:这是我的数组:

Array
(
    [0] => Array
        (
            [database] => oneclick_themes
            [disk_usage] => 16384
            [users] => Array
                (
                    [0] => oneclick_themes
                )

        )

    [1] => Array
        (
            [database] => oneclick_wp1
            [disk_usage] => 123230
            [users] => Array
                (
                    [0] => oneclick_wp1
                )

        )

    [2] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp10
                )

            [database] => oneclick_wp10
            [disk_usage] => 123230
        )

    [3] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp11
                )

            [disk_usage] => 123222
            [database] => oneclick_wp11
        )

    [4] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp12
                )

            [disk_usage] => 123230
            [database] => oneclick_wp12
        )

    [5] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp13
                )

            [disk_usage] => 123222
            [database] => oneclick_wp13
        )

    [6] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp14
                )

            [database] => oneclick_wp14
            [disk_usage] => 123222
        )

    [7] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp2
                )

            [disk_usage] => 123226
            [database] => oneclick_wp2
        )

    [8] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp3
                )

            [disk_usage] => 0
            [database] => oneclick_wp3
        )

    [9] => Array
        (
            [database] => oneclick_wp4
            [disk_usage] => 123230
            [users] => Array
                (
                    [0] => oneclick_wp4
                )

        )

    [10] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp5
                )

            [database] => oneclick_wp5
            [disk_usage] => 0
        )

    [11] => Array
        (
            [users] => Array
                (
                    [0] => oneclick_wp6
                )

            [database] => oneclick_wp6
            [disk_usage] => 0
        )

    [12] => Array
        (
            [disk_usage] => 123222
            [database] => oneclick_wp7
            [users] => Array
                (
                    [0] => oneclick_wp7
                )

        )

    [13] => Array
        (
            [disk_usage] => 123222
            [database] => oneclick_wp8
            [users] => Array
                (
                    [0] => oneclick_wp8
                )

        )

    [14] => Array
        (
            [database] => oneclick_wp9
            [disk_usage] => 0
            [users] => Array
                (
                    [0] => oneclick_wp9
                )

        )

)

This is my PHP code:这是我的 PHP 代码:

$array = array();
function search_array($array, $val) {
    $ArrIterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); 
    foreach($ArrIterator as $id => $sub) {
      $childArray = $ArrIterator->getSubIterator();
      if(strstr(strtolower($sub), strtolower($val))) {
        $childArray = iterator_to_array($childArray);
        $result[] = $childArray['database'];
      }
    }  
    return $result;
}
$results = array_filter( search_array( $array, '_wp') );
foreach( $results as $key=> $value ) {
  $results[$key] = str_replace( $wp_db_prefix . "wp","", $value);
};
$wp_next_db_name = max($results) + 1;

Here is what it does.这就是它的作用。

It searches a multi-dimensional array which MYSQL DB info for the "_wp" string within the values.它在 MYSQL DB 信息的多维数组中搜索值中的“_wp”字符串。

Then it filters out the user account prefix "oneclick_" with prefix "wp" which leaves me with integers.然后它过滤掉带有前缀“wp”的用户帐户前缀“oneclick_”,这给我留下了整数。

Then I find the highest value (max) and increment by 1.然后我找到最大值(最大值)并增加 1。

The purpose is for a cPanel plugin to create incremental DB names.目的是让 cPanel 插件创建增量数据库名称。

If you only want to look at the values in the database elements of your array, you can use array_column to extract them, and then array_map to iterate over those values, capturing the integer part if they begin with oneclick_wp , finally feeding those results into max to get the maximum value and adding 1:如果您只想查看数组的database元素中的值,可以使用array_column提取它们,然后使用array_map迭代这些值,捕获 integer 部分(如果它们以oneclick_wp开头),最后将这些结果输入max得到最大值并加1:

$wp_db_prefix = 'oneclick';
$max = max(array_map(function ($v) use ($wp_db_prefix) { 
    return (int)str_replace("{$wp_db_prefix}_wp", '', $v);
    }, 
    array_column($array, 'database'))) + 1;
echo $max;

Output Output

15

Demo on 3v4l.org 3v4l.org 上的演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM