Соответствующие массивы в php - PullRequest
1 голос
/ 13 февраля 2010

Мне нужно проверить, будет ли данный массив соответствовать другому массиву. Я не могу понять, как либо манипулировать первым массивом, либо сопоставить его другим способом

Мне нужно сопоставить этот массив:

    Array
(
    [1] => site
    [2] => blog
    [3] => index.php
)

, чтобы соответствовать этому:

Array
(
    [site] => Array
        (
            [path] => site
            [name] => site
            [kind] => directory
            [content] => Array
                (
                    [404] => Array
                        (
                            [path] => site/404.php
                            [name] => 404.php
                            [extension] => php
                            [kind] => file
                        )

                    [blog] => Array
                        (
                            [path] => site/blog
                            [name] => blog
                            [kind] => directory
                            [content] => Array
                                (
                                    [contact] => Array
                                        (
                                            [path] => site/blog/contact.php
                                            [name] => contact.php
                                            [extension] => php
                                            [kind] => file
                                        )

                                    [index] => Array
                                        (
                                            [path] => site/blog/index.php
                                            [name] => index.php
                                            [extension] => php
                                            [kind] => file
                                        )

                                    [about] => Array
                                        (
                                            [path] => site/blog/about.php
                                            [name] => about.php
                                            [extension] => php
                                            [kind] => file
                                        )

                                )

                        )

                    [index] => Array
                        (
                            [path] => site/index.php
                            [name] => index.php
                            [extension] => php
                            [kind] => file
                        )

                )

        )

)

И вернуть массив содержимого файла:

                            [index] => Array
                                (
                                    [path] => site/blog/index.php
                                    [name] => index.php
                                    [extension] => php
                                    [kind] => file
                                )

Помощь будет принята с благодарностью!

Ответы [ 4 ]

2 голосов
/ 13 февраля 2010

Просто индекс в массиве:

$b[$a[1]]['content'][$a[2]]['content'][str_replace('.php', '', $a[3])]

Если ваш ввод может быть переменной длины, делайте это в цикле.

1 голос
/ 13 февраля 2010

Так что вам нужно ...

$array2[$array[1]][content][$array[2]][substr(0, stripos($array[3], "."), $array[3])]

Или что-то близкое ...

0 голосов
/ 13 февраля 2010

Могу ли я считать, что вы хотите проверить этот список индексов в большем массиве и вернуть любые результаты, которые доступны / совпадают? Если это так, и если ваш первый массив называется $indexes, а второй - $results, вы можете сделать:

$found = array();
foreach($indexes as $index) {
  if(isset($results[$index])) {
    $found[] = $results[$index]['content'];
  }
}

и теперь у вас будет $found со списком всех записей контента, найденных в $ results, которые соответствуют индексам в $ indexes. Надеюсь, это поможет.

0 голосов
/ 13 февраля 2010
$path = array('site', 'blog', 'index.php');
$node = array(...);  // the tree

for ($i = 0; $i < count($path) && !is_null($node); ++$i) {
  $p = $path[$i];
  $items = $i ? $node['content'] : $node;
  $n = null;
  foreach ($items as $it) {
    if ($it['name'] == $p) {
      $n = $node['content'][$p];
      break;
    }
  }
  $node = $n;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...