小编Woo*_*ome的帖子

PHP json_encode - JSON_FORCE_OBJECT混合对象和数组输出

我有一个PHP数据结构,我想要JSON编码.它可以包含许多空数组,其中一些需要编码为数组,其中一些需要编码为对象.

例如,假设我有这样的数据结构:

$foo = array(
  "bar1" => array(), // Should be encoded as an object
  "bar2" => array() // Should be encoded as an array
);
Run Code Online (Sandbox Code Playgroud)

我想把它编码成:

{
  "bar1": {},
  "bar2": []
}   
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用json_encode($foo, JSON_FORCE_OBJECT)我会得到对象:

{
  "bar1": {},
  "bar2": {}
}
Run Code Online (Sandbox Code Playgroud)

如果我使用json_encode($foo)我会得到数组:

{
  "bar1": [],
  "bar2": []
}
Run Code Online (Sandbox Code Playgroud)

有没有办法编码数据(或定义数组),所以我得到混合数组和对象?

php json

37
推荐指数
1
解决办法
3万
查看次数

指向C中的字符串数组的指针

玩指针C很有趣(不是真的).

我有几个字符串数组我想以简单的方式声明,最好是:

arrayOfStrings1 = {"word1", "word2", etc. };
arrayOfStrings2 = {"anotherword1", "anotherword2", etc. };
arrayOfStrings3 = etc.
etc.
Run Code Online (Sandbox Code Playgroud)

类似于翻译数组的东西(但不完全),所以我希望能够在运行时间间隔这些.为此,我想要一个pointerToArrayOfStrings我可以交换的指针:

pointerToArrayOfStrings = arrayOfStrings1;
doStuff();
pointerToArrayOfStrings = arrayOfStrings2;
doSomeOtherStuff();
Run Code Online (Sandbox Code Playgroud)

在我对字符串数组和指向这些字符串的指针的天真理解中,这就是我所尝试的:

// Danish transforms
const unsigned char* da_DK[] = {"b","bb","c","c","cc","d","dd","e","f","ff","g","gg","h","hh","j","j","jj","k","k","kk","l","l","l","l","ll","m","mm","n","n","nn","p","pp","r","r","r","rr","s","s","s","ss","t","t","tt","v","v","vv","æ"};

// British english transforms
const unsigned char* en_GB[] = {"a","a","a","a","a","a","a","a","a","a","a","a","a","age","ai","aj","ay","b","cial","cian","cian","dj","dsj","ea","ee","ege","ei","ei","eigh","eigh","f","f","f","g","g","gs","i","i","i","j","j","k","ks","kw","l","m","n","n","o","r","s","s","sd","sdr","sion","sion","sj","sj","tial","tion","tion","tj","u","u","u","u","w","ye","ye","z"};

    // More languages....

const unsigned char** laguageStrings;

// Assign language
if (streq(language, "da-DK")){
    laguageStrings= da_DK;
}
else if (streq(language, "en-GB")){
    laguageStrings= en_GB;
}
else
         return 0;
}
Run Code Online (Sandbox Code Playgroud)

语言是char …

c arrays string pointers

11
推荐指数
1
解决办法
4万
查看次数

如何检查Chrome扩展程序是否已完全安装

使用Chrome网上应用店内联安装(https://developers.google.com/chrome/web-store/docs/inline_installation),可以指定在chrome.webstore.install()成功安装扩展程序时执行的回调.

通过一些非常繁琐的调试,我了解到在执行回调时不必100%安装扩展 - 可能是后台尚未加载或内容脚本尚未可用.

在我的特定情况下,问题以这种方式出现:

  1. 用户单击chrome.webstore.install()绑定到onclick事件的安装按钮.
  2. 成功回调注入iFrame.
  3. 内容脚本是为iFrame定义的,并注入了一些完成工作
  4. 内容脚本返回完整的安装对话框.

第3步是问题所在.有时在内容脚本完全加载之前会注入iFrame,因此不会注入任何脚本(内容脚本仅注入新创建的iFrame内,而不是在安装/启用扩展时已存在的iFrame).

我知道有可能的解决方法,例如扩展本身注入iFrame或简单setTimeout(),但为了帮助其他人,我认为值得提问:

如果chrome.webstore.install()回调无法确保,我怎么能确定扩展是100%安装的呢?

使用检查用户是否安装了某个扩展程序<img>描述的着名加载方法无法可靠地工作(对于那些认为是解决方案的人).

javascript google-chrome google-chrome-extension

8
推荐指数
1
解决办法
2511
查看次数

YouTube嵌入iPad:通过Javascript API启动时永久缓存

我在使用YouTube嵌入式工作时遇到了一些问题.

我正在使用YouTube API加载视频.在加载的视频之上,我有一个自定义控件<div>(透明),只有一个播放按钮(an <img>).这样做是为了隐藏默认的YouTube播放器,该播放按钮与网站上其他设计一致.

<div>覆盖整个加载的iFrame,因此玩家本身无法点击-我用了一个点击事件<div>开始播放视频,而不是:

// Inside onYouTubePlayerAPIReady():
var player = new YT.Player(playerId, {
  height: height,
  width: '100%',
  videoId: videoId,
  playerVars: {
    html5: '1',
    controls: '0',
    rel: '0',
    showinfo: '0',
    modestbranding: '1',
    theme: 'light',
    color: 'white',
    wmode: 'transparent',
    suggestedQuality: "large"
  }
});

$(".youtube-player-controls").bind("click", function(e){
  if (!player || !player.getPlayerState) return false;
  if (player.getPlayerState() == YT.PlayerState.PLAYING) player.pauseVideo();
  else player.playVideo();
  return false;
});
Run Code Online (Sandbox Code Playgroud)

在iPhone上工作正常,但在iPad(以及Android似乎)上,视频切换到视频的第一帧,但随后在缓冲状态下停止(通过检查player.getPlayerState()).

我尝试启动player.loadVideoById()不起作用的视频(相同的错误).

如果我删除重叠的控件<div>,从而允许用户实际点击视频,它工作正常.

有关如何使用Javascript API播放视频的任何建议?

编辑:

我稍微更改了嵌入代码,即我添加了 …

youtube youtube-api ipad

8
推荐指数
1
解决办法
3027
查看次数

如何捕获promise运行时Javascript错误?

我目前正在实现一个基于PDF.js的PDF查看器,作为我了解promise对象的一部分.

我还了解到调试控制台中不会自动显示运行时错误:

PDFJS.getDocument(...).then(
  function(pdfDocument){
    alert(UndefinedVariable); // Not shown in console!
  },
  function(error){
    console.log("Error occurred", error);
  }
);
Run Code Online (Sandbox Code Playgroud)

除了.done()http://www.asyncdev.net/2013/07/promises-errors-and-express-js/中描述的添加之外,我还没有找到在promise函数中显示运行时错误的漂亮方法.(这对PDF.js不起作用)或添加.catch(function(error){ console.error(error); }).

我知道我可以在调试器中打破运行时错误的异常,但是我也可以通过这样做来打破其他异常(在jQuery中),这意味着我必须在每个页面加载时执行5个jQuery异常,然后我才能检查我自己的代码是否包含运行时错误.

有没有办法强制promise函数像正常一样记录运行时错误(没有为每个函数调用编写额外的代码)?

javascript promise

6
推荐指数
1
解决办法
2649
查看次数

Chrome扩展长寿命消息连接-如何使用回调函数?

一段时间以来,我一直在使用chrome.runtime.sendMessage(message, callback)内容脚本中的消息,这些消息需要在收到后台响应后运行回调函数。

我还有一个长期连接,用于从后台向内容脚本发送消息(而不是对内容脚本发起的消息的响应):

backgroundPort = chrome.runtime.connect({ name: "contentScript" });
backgroundPort.onMessage.addListener(function(message){
  if (message["action"] == "something"){
    // Do stuff
  }
});
Run Code Online (Sandbox Code Playgroud)

据我所知,backgroundPort.postMessage()支持回调消息,这意味着具有回调的消息需要使用chrome.runtime.sendMessage().

这种方法的问题在于,在每条消息的内容脚本/背景之间建立新的连接会产生大量开销,因此我尝试通过将回调功能添加到现有的长期连接中backgroundPort,但它变得很友好的凌乱。

谁能想出一个优雅的解决方案?

javascript google-chrome google-chrome-extension

6
推荐指数
1
解决办法
3101
查看次数

如何防止同一应用程序中窗口的焦点被窃取?

使用SetWindowLong()并且WS_EX_NOACTIVATE我已经使一个窗口不可激活。

  • 如果我将光标放在记事本中并单击不可激活的窗口,则光标在记事本中保持活动状态。
  • 如果我将光标放在应用程序内的另一个窗口中并单击不可激活的窗口,则光标将从另一个窗口中删除。

我做了一个迷你项目来重现该问题:http://s000.tinyupload.com/index.php? file_id=78888532457762447347

基本上是一个具有两个窗口的 WPF 应用程序:

主窗口

// XAML code
<Window x:Class="CS_test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Background="LightGray" Height="300" Width="400">
    <Grid>
        <TextBox Width="300" Height="200"></TextBox>
    </Grid>
</Window>

// C# code
namespace CS_test
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            new NonActiveWindow().Show();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

非活动窗口

// XAML code
<Window x:Class="CS_test.NonActiveWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="NonActiveWindow" Height="300" Width="300"
        Loaded="Window_Loaded">
    <Grid>
    </Grid>
</Window>

// C# code
namespace CS_test
{
    public partial class NonActiveWindow : Window …
Run Code Online (Sandbox Code Playgroud)

c# winapi

6
推荐指数
1
解决办法
1528
查看次数

filemtime()在执行期间保持不变,尽管文件已更改

试试跑步

<?php
  echo filemtime("test.txt")."\n";
  sleep(4);
  file_put_contents("test.txt", "test");
  echo filemtime("test.txt")."\n";
?>
Run Code Online (Sandbox Code Playgroud)

对我来说打印的命令行:

1343490984
1343490984
Run Code Online (Sandbox Code Playgroud)

那可能不对,可以吗?

php filemtime

4
推荐指数
1
解决办法
2419
查看次数

Unix特殊情况下敏感的UTF-8排序

我找到了一个关于我的问题的线程(shell - 不同版本的UNIX排序处理案例不同),但它给出了"相反"的答案.

我已经搞乱了LANG变量,但似乎无法找到实现我目标的值.

举例来说:

abc a
Abc d
Abc b
abc e
abæ g
Run Code Online (Sandbox Code Playgroud)

需要分类到:

abc a
abc c
Abc b
Abc d
abæ g
Run Code Online (Sandbox Code Playgroud)

不是这个(这是我目前得到的):

Abc b
Abc d
abc a
abc c
abæ g
Run Code Online (Sandbox Code Playgroud)

而不是这个(这是我在不区分大小写时得到的):

abc a
Abc b
abc c
Abc d
abæ g
Run Code Online (Sandbox Code Playgroud)

换句话说:我希望每列具有区分大小写的排序,其中大写起始字母的单词未在顶部排序,同一单词的大写/小写版本不会混合在一起,具体取决于第二列.

请注意,我需要UTF-8敏感排序(在这种情况下,我使用丹麦字母"æ",它放在字母表中,如下所示:"...vwxyzæøå").

我使用以下方法对两列进行排序:

sort test.txt -k1,1 -k2,2
Run Code Online (Sandbox Code Playgroud)

我可以用任何方式在不诉诸剧本的情况下做到这一点吗?

sorting unicode shell collation utf-8

3
推荐指数
1
解决办法
1025
查看次数

tinyMCE - 获取内容到光标位置

我正在为tinyMCE制作一个单词预测插件,需要提取一些文本,然后从预测单词列表中插入文本.插入应该没问题,因为我知道光标在哪里并且可以使用该mceInsertContent命令.获取预测的文本但是......

我需要提取文本的一个子集,该文本以光标位置之前的字母结尾,并从文本的开头开始.如果需要,我可以自己剥离HTML标签,但我更喜欢让tinyMCE尽可能地做.

我想这样做:

  1. 使用在当前光标位置插入书签 mceInsertContent
  2. 创建从文本开头到书签的范围.
  3. 获取范围的内容.
  4. 删除书签.

现在,因为我不熟悉那些对我来说有点挑战的tinyMCE,所以怎么会这样做呢?

代码需要跨浏览器工作.

javascript tinymce cursor-position tinymce-plugins

3
推荐指数
1
解决办法
7296
查看次数

为什么 GetWindowRect 在我的 WPF 窗口中包含标题栏?

我正在尝试使用GetWindowRect()(和GetGUIThreadInfo())获得插入符号位置:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Runtime.InteropServices;

namespace WpfApplication1
{
    public class CaretInfo
    {
        public double Width { get; private set; }
        public double Height { get; private set; }
        public double Left { get; private set; }
        public double Top { get; private set; }

        public CaretInfo(double width, double height, double left, double top)
        {
            Width = width;
            Height = height;
            Left = left;
            Top = top;
        }
    } …
Run Code Online (Sandbox Code Playgroud)

c# wpf pinvoke caret

1
推荐指数
1
解决办法
1275
查看次数