Как получить ключ массива динамически для проверки состояния в PHP? - PullRequest
0 голосов
/ 25 марта 2011

У меня есть один массив, например


$test_input= array(
  0=> array(
    "task" => 'ColumnTree Example',
    "duration" => '3 hours',
    "user"=> '',
    "uiProvider" => 'col',
    "cls" => 'master-task',
    "iconCls" => 'task-folder',
    'children'=> array(
      0 => array(
        "task" => 'Abstract rendering in TreeNodeUI',
        "duration" => '15 min',
        "user" => 'Jack Slocum',
        "uiProvider" => 'col',
        "leaf" => true,
        "iconCls" => 'task'
      ),
      array(
        "task" => 'Test and make sure it works',
        "duration" => '1 hour',
        "user" => 'Jack Slocum',
        "uiProvider" => 'col',
        "leaf" =>true,
        "iconCls" =>'task'
      )
    )
  ),
  array(
    "task" => 'Custom Field Example',
    "duration" => '2 1/2 hours',
    "user" => '',
    "uiProvider" => 'col',
    "cls" => 'master-task',
    "iconCls" => 'task-folder',
    'children'=>array(
      0 => array(
        "task" =>'Implement "Live Search" on extjs.com from Alex',
        "duration" =>'1 hour',
        "user" =>'Jack Slocum',
        "uiProvider" =>'col',
        "leaf" =>true,
        "iconCls"=> 'task'
      ),
      array(
        "task"=>'Extend TwinTrigger',
        "duration"=>'30 min',
        "user"=>'Jack Slocum',
        "uiProvider"=>'col',
        "leaf"=>true,
        "iconCls"=>'task'
      )
    )
  ),
  array(
    "task"=>'Foo Bar Item',
    "duration"=>'3 hours',
    "user"=>'',
    "uiProvider"=>'col',
    "cls"=>'master-task',
    "iconCls"=>'task-folder',
    'children'=>array(
      0 => array(
        "task"=>'Abstract rendering in TreeNodeUI',
        "duration"=>'15 min',
        "user"=>'Jack Slocum',
        "uiProvider"=>'col',
        "leaf"=>true,
        "iconCls"=>'task'
      ),
      array( 
        "task"=>'Create TreeNodeUI with column knowledge',
        "duration"=>'45 min',
        "user"=>'Jack Slocum',
        "uiProvider"=>'col',
        "leaf"=>true,
        "iconCls"=>'task'
      )
    )
  )
);

Я хочу кое-что сделать.Проверяя условие

if($key=="task")
 {
   something/.........
 }

Так что вместо того, чтобы статически давать значение ключа как «задание».Мне нужно, чтобы это происходило динамически.Я использую array_map для отображения моей функции и моего массива.Пожалуйста, дайте мне несколько примеров, как это сделать.

Ответы [ 3 ]

0 голосов
/ 25 марта 2011

вы можете использовать foreach для этого. Используете ли вы foreach для этой задачи, но вы должны проверить это, как вы делаете.

Потому что, используя foreach, вы можете получить пару ключ и значение, но чтобы проверить что-то, вы должны поставить условие.

0 голосов
/ 30 марта 2011

Из вашей структуры данных, похоже, вам нужно выполнить рекурсию . Попробуйте этот код:

function walk_array($array, &$returnData, $depth = 0)
{
    $depth++;
    foreach( $array as $key=>$value)
    {
        $returnData[] = $value['task'];

        if( isset( $value['children'] ) && is_array( $value['children'] ) )
        {
            walk_array($value['children'], &$returnData, $depth);
        }
    }
}

Проверьте это так:

$returnData = array();
walk_array($test_input, &$returnData);
echo implode("<br />", $returnData);

Одна вещь, которую стоит отметить относительно рекурсии будьте осторожны при разработке код. Одна крошечная ошибка может закончиться зацикливание бесконечно.

0 голосов
/ 25 марта 2011

Не могли бы вы использовать оператор foreach?http://php.net/manual/en/control-structures.foreach.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...