GVKun编程网logo

在PHP中解析Javascript文件以提取其中定义的数组的最佳方法(js获取php数组)

9

如果您对在PHP中解析Javascript文件以提取其中定义的数组的最佳方法和js获取php数组感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在PHP中解析Javascript文件以提取其中定

如果您对在PHP中解析Javascript文件以提取其中定义的数组的最佳方法js获取php数组感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解在PHP中解析Javascript文件以提取其中定义的数组的最佳方法的各种细节,并对js获取php数组进行深入的分析,此外还有关于javascript – 从没有循环获取特定对象和数组的最佳方法、javascript – 在jquery库中重新定义方法的最佳方法、javascript – 检查变量是否未定义的最佳实践、javascript – 设置要忽略的类数组的最佳方法的实用技巧。

本文目录一览:

在PHP中解析Javascript文件以提取其中定义的数组的最佳方法(js获取php数组)

在PHP中解析Javascript文件以提取其中定义的数组的最佳方法(js获取php数组)

我有一个Javascript文件,它是从遗留应用程序自动生成的,其中定义了一个巨大的数组(以及其他一些函数和东西).这个javascript文件对内容进行搜索,但随着时间的推移,它已经增长到超过2Mb,这可能听起来不多,但每次你想用这个特定的web应用程序进行搜索时你都必须下载它.毋庸置疑,表现非常恶劣.我想要一个简单的方法在js周围放置一个包装器,这样它就不会调用客户端的js,而是调用我的新PHP脚本来搜索内容.

生成的JS文件的布局在每次生成时都是相同的,所以我可以编写一堆特定的修剪和分割,但后来我认为regexp可能是要走的路,但说实话我不是当然,所以我想我会问你可爱的人.

样本来源:

Page[0]=new Array("Some text1","More text1","Final Text1","abc.html");
Page[1]=new Array("Some text2","More text2","xyz.html");

如您所见,每个数组行中至少有一个条目,最后一个条目是要搜索的文件的名称.

无论如何,问题是,regexp是否最好(如果是这样,一些建议的模式会很棒).或者如果我应该用拆分等分割它

干杯

解决方法:

你正在寻找这样的东西.注意我将.js文件作为本地文件,因此我使用file()将其加载到数组中.对于您的实际脚本,如果您的PHP无法在本地访问.js文件,则可能需要file_get_contents().

<?PHP
$lines = file('test.js');

    $pages = array();

    foreach($lines as $line) {
        if(strpos($line, 'new Array') != false) {

            preg_match('/Page\[\d\]\s?\=\s?new Array\((\"(.*)",?\s?\n?)+\);/', $line, $matches);


            $values = preg_split('/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/', $matches[1]);

            $currNo = count($pages);
            $pages[$currNo] = array();

            for($i = 0; $i < count($values); $i++) {
                array_push($pages[$currNo], trim($values[$i], '"'));
            }


        }
    }

    var_dump($pages);

对于您的示例,结果将如下所示:

array(2) {
  [0]=>
  array(4) {
    [0]=>
    string(10) "Some text1"
    [1]=>
    string(10) "More text1"
    [2]=>
    string(11) "Final Text1"
    [3]=>
    string(8) "abc.html"
  }
  [1]=>
  array(3) {
    [0]=>
    string(10) "Some text2"
    [1]=>
    string(10) "More text2"
    [2]=>
    string(8) "xyz.html"
  }
}

请享用!

javascript – 从没有循环获取特定对象和数组的最佳方法

javascript – 从没有循环获取特定对象和数组的最佳方法

在我的角度应用程序的一个控制器中,我有一个变量集如下.

SomeService.get({},function(data){
    // this sets xyz as the list of the data retrieved 
    // from the resource within the controllers scope
    $scope.xyz = data.objects;    
});

现在$scope.xyz看起来像

[
    0: {id: 1,...more data here ...},1: {id: 2,2: {id: 3,3: {id: 4,4: {id: 5,5: {id: 6,]

我想要做的是使用id属性(而不是列表索引)在xyz中获取一个对象.我知道我可以按如下方式迭代数组.

angular.forEach($scope.xyz,function(obj){ return obj.id == 1;});

但有没有办法我可以做到而不循环列表?

解决方法

不,你不能真正避免循环(O(n)),除非满足一些先决条件.

>如果数组按id排序,则可以使用二进制搜索算法(O(log n)).
>如果数组索引始终对应于id-1(或类似的简单公式),则可以在O(1)中直接访问它.

如果最初没有满足这些条件,但您需要多次访问id的项目,那么将它们放入该表单(排序/构建哈希映射)可能会有所帮助.

javascript – 在jquery库中重新定义方法的最佳方法

javascript – 在jquery库中重新定义方法的最佳方法

假设我想在bootstrap-typeahead库中更改render函数.
http://twitter.github.com/bootstrap/assets/js/bootstrap-typeahead.js

实现这一目标的一种方法是:

_.extend($.fn.typeahead.Constructor.prototype,{
    render: function (items) {
      // some code
    }
});

假设我想重新定义渲染函数,仅用于特定元素,如…

element.typeahead({
    minLength: 3,source: getSource
});

我应该如何重新定义渲染函数才能使该元素有效?

P.S:
我正在使用jquery和下划线

解决方法

也许你可以先克隆它?

$.fn.typeaheadCustom = $.fn.typeahead;

_.extend($.fn.typeaheadCustom.Constructor.prototype,{
    render: function (items) {
      // some code
    }
 });

element.typeaheadCustom({
    minLength: 3,source: getSource
});

UPDATE

您可能需要深度克隆它:

$.fn.typeaheadCustom = $.extend(true,$.fn.typeahead,{});

javascript – 检查变量是否未定义的最佳实践

javascript – 检查变量是否未定义的最佳实践

关于未定义变量的条件我遇到了一些问题.总结一下,检查变量是否未定义的最佳方法是什么?

我主要是在苦苦挣扎

x === undefined

typeof x === 'undefined'

解决方法

您可以使用这两种方法来检查值是否未定义.但是,您需要注意的细微差别.

第一种方法使用严格比较===运算符来比较未定义的type:

var x;
// ...

x === undefined; // true

只有在声明变量但未定义变量时,这才会正常工作,即具有未定义的值,这意味着代码中的某个地方有var x,但它从未被赋值.所以它的定义是不确定的.

但是如果变量没有用var关键字声明上面的代码会抛出引用错误:

x === undefined // ReferenceError: x is not defined

在这种情况下,比较类型更可靠:

typeof x == 'undefined' // true

这将在两种情况下都正常工作:如果变量从未被赋值,并且其值实际上是未定义的.

javascript – 设置要忽略的类数组的最佳方法

javascript – 设置要忽略的类数组的最佳方法

我在jQuery脚本中有以下if语句,用于检查图像是否具有“忽略”类,如果是,则忽略它.这是脚本在我页面的特定部分中先前找到的图像:

if(!$(this).hasClass('ignore')) {
 //do something
}

我如何设置它以便我可以存储一个类数组,然后对该数组进行if语句检查?

解决方法:

像往常一样创建一个数组,并推送您想要忽略的任何类.

在if语句中执行.not()选择器并通过调用join函数传入Array值.

var classes = new Array(".ignore", ".something");

// on a single img

if(!$(this).is(classes.join(",")) {
    //do something to one
}

// on a collection of imgs

$("img").not(classes.join(", "));

$("img").not(classes.join(", ")).each(function(){
    // do something to one
});

http://jsfiddle.net/hEsPd/1/

关于在PHP中解析Javascript文件以提取其中定义的数组的最佳方法js获取php数组的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于javascript – 从没有循环获取特定对象和数组的最佳方法、javascript – 在jquery库中重新定义方法的最佳方法、javascript – 检查变量是否未定义的最佳实践、javascript – 设置要忽略的类数组的最佳方法的相关知识,请在本站寻找。

本文标签: