0

I managed to write the following function which took me all afternoon. 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:

$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.

Then it filters out the user account prefix "oneclick_" with prefix "wp" which leaves me with integers.

Then I find the highest value (max) and increment by 1.

The purpose is for a cPanel plugin to create incremental DB names.

1
  • Do you only want to look in the database element? Commented Nov 3, 2019 at 2:46

1 Answer 1

2

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:

$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

15

Demo on 3v4l.org

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.