Почему область памяти 1 020$ является незаписываемой на M68HC12 с staa?

Примерно так

$selectors = ["my_array","my_key","my_elemnt"];

$data = (array)$my_instance->my_object;

foreach($selectors as $k=>$v){
    if(isset($data[$k])){
        $data = $data[$k]; //reduce data by 1 level
    }else{
       $data = false;
       break;
    }
}

print_r($data);

По сути, каждый раз, когда вы зацикливаетесь на «селекторе», который существует в массиве, вы уменьшаете массив на 1 уровень, например, если мы начнем с этого

[ 111]

Вывод

Array
(
    [foo] => Array
        (
            [bar] => Array
                (
                    [baz] => 1
                )

        )

)
Array
(
    [bar] => Array
        (
            [baz] => 1
        )

)
Array
(
    [baz] => 1
)

---------- Final ------------
1

Песочница

Вы можете увидеть «иллюстрированный» выше, как мы можем перейти к элементу, который мы хотим. Каждый array выше является состоянием $data до его снижения на этот уровень селекторов. Таким образом, один после этого показывает результаты его снижения. Таким образом, первый массив перед применением "foo", второй после этого, но до "bar" и т. Д.

Если вы хотите использовать строку для $selectors, например, с запятыми или чем-то еще, достаточно просто использовать explode() или preg_split(), чтобы разбить эту строку на некотором разделителе в массив. Например:

 $selectors = "foo.bar.baz";
 $selectors = explode(".", $selectors ); //["foo","bar","baz"]
 //...

PS Я бы использовал реальные данные, если бы они были предоставлены, но поскольку это единственный способ для меня проверить это, объяснить это. [1119 ]

Кроме того, это, очевидно, хороший кандидат для создания функции из:

function transverseWithKeys(array $array, $keys, $default=null, $glue='.'){
   if(!is_array($keys)) $keys = explode($glue,$keys);

   foreach($keys as $v){
       if(isset($array[$v])){
           $array= $array[$v]; //reduce data by 1 level
       }else{
           return $default;
       }
   }
   return $array;
}

Надеюсь, это поможет.

6
задан Ryan Gates 30 December 2013 в 19:17
поделиться

1 ответ

Я полагаю, что там существует ROM

10.3 Массив ROM

ROM сделан из 28K массива байтов, отображенного от 1 000$ до FFF за 7$ и 32 массивов байтов K, отображенных от 8 000$ до $FFFF в сбросе. Бит MAPROM в регистре MISC позволяет свопинг двух массивов. ROMON28 и ROMON32 включают или отключают модуль ROM

Из таблицы данных M68HC12

6
ответ дан 17 December 2019 в 02:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: