Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在循环中搜索字符串中的字符_Javascript_Php_Html_Angularjs - Fatal编程技术网

Javascript 在循环中搜索字符串中的字符

Javascript 在循环中搜索字符串中的字符,javascript,php,html,angularjs,Javascript,Php,Html,Angularjs,我有一个字符串,包含3种不同类型的字符,具有特殊含义。我有一个迭代160次的循环,对于循环的每次迭代,我想检查字符串中的当前字符。因此,如果是循环的第一次迭代,我想检查字符串中的第一个位置,并检查它是什么类型的字符。如果是第二次迭代,我想检查字符串etcetc中的第二个位置 我怎样才能在AngularJS中做到这一点 我正在从php后端返回字符串 以下是PHP中的解决方案,但我希望它能与AngularJS一起使用: <?php $string = "........####........

我有一个字符串,包含3种不同类型的字符,具有特殊含义。我有一个迭代160次的循环,对于循环的每次迭代,我想检查字符串中的当前字符。因此,如果是循环的第一次迭代,我想检查字符串中的第一个位置,并检查它是什么类型的字符。如果是第二次迭代,我想检查字符串etcetc中的第二个位置

我怎样才能在AngularJS中做到这一点

我正在从php后端返回字符串

以下是PHP中的解决方案,但我希望它能与AngularJS一起使用:

<?php
$string = "........####........
.....##..##.........
......#.......&&&&&&
......&&&&&&........
.&..&&&....%..##.&&&
&&......##......&&&.
....................
.#..................";

$k = 1;
for($j = 1; $j <= 8; $j++)
{
    echo "<tr>";
    for($i = 1; $i <= 20; $i++)
    {   
        if($string[$k] == "#")
        {
            echo "<td id='$k'>#</td>";
        }
        elseif($string[$k] == "&")
        {
            echo "<td class='click' val='water' id='$k'>&</td>";
        }
        else
        {
            echo "<td class='click' id='$k'><a href='#'></a></td>";
        }
        $k++;
    }
    echo "</tr>";
}
?>
gameApp.controller("gameCtrl", function($scope,$http,link,$location) {
    $scope.trr = [1,2,3,4,5,6,7,8];
    $scope.tdd = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
    $scope.getMonsters = "1";
    var map;

    $http.post("lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
        map = data;
        console.log(map);
    });

    if(link.user) {
        /*$scope.message = "fisk";
        console.log(link.user);*/
    } else {
        /*$scope.message = "Ledsen fisk";
        console.log("Är inte satt");*/
    }
});
这是我的PHP后端:

<?php
    session_start();
    include("classes.php");
    $data = file_get_contents("php://input");
    if(isset($data))
    {
        $objData = json_decode($data);
        $login = new User();
        echo $login->doLogin($objData->username, $objData->password);

        if(isset($objData->monsters)) 
        {
            $string = "........####.............##..##...............#.......&&&&&&......&&&&&&.........&..&&&....%..##.&&&&&......##......&&&......................#..................";
            echo $string;
        }
    }

好吧,您只需在Javascript中创建一个函数,该函数的功能完全相同:

function makeTableFrom(str) {

  var k = 1,
    result = "";

  for (var i = 1; i <= 8; i++) {
    result += '<tr>';

    for (var j = 1; j <= 20; j++) {

      if (str[k] === '#') {
        result += '<td id="' + k + '">#</td>';
      }
      else if (str[k] === '&') {
        result += '<td class="click" val="water" id="' + k + '">&</td>';
      }
      else {
        result += '<td class="click" id="' + k + '"><a href="#"></a></td>';
      }

      k++;
    }

    result += '</tr>';
  }

  return result;
}
但是,让我澄清一个事实,在php函数中或在本函数中,对
$string[$k]
str[k]
的调用应该使用
k-1
,因为字符串索引中存在偏移量

下面是一个指向JSFIDLE的链接,说明了其中的区别:

更新:

要将生成的字符串用作表的内部HTML,应将
ng bind HTML
与ngSanitize模块结合使用,如下所示:

<div ng-app="gameApp">
  <div ng-controller="gameCtrl">
    <table ng-bind-html="gameTable">
    </table>
  </div>
</div>
并编辑您的
$http.post().success()
函数:

$http.post("lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
  map = data;
  console.log(map);

  $scope.gameTable = makeTableFrom(data); // Where you update the table depending on your ajax call
});

链接到更新的JSFIDLE:

非常感谢。这比我想象的要容易。但是如何将结果“解析”到我的HTML页面?使用angularjs将html解析为视图似乎非常困难。还有别的方法吗?在HTML中“解析”是什么意思?如果您的意思是将其插入
标记中,那么在JSFIDLE中有一个使用jQuery的示例。如何打印视图文件中结果变量中的值?
<div ng-app="gameApp">
  <div ng-controller="gameCtrl">
    <table ng-bind-html="gameTable">
    </table>
  </div>
</div>
angular.module('gameApp', ['ngSanitize'])
$http.post("lib/action.php", {monsters: $scope.getMonsters}).success(function(data) {
  map = data;
  console.log(map);

  $scope.gameTable = makeTableFrom(data); // Where you update the table depending on your ajax call
});