我试图array_keys()通过引用来获取关联数组的第一个键,而不创建临时变量等.不幸的是,reset()并且array_shift()通过引用获取数组参数,因此似乎都不是可行的结果.
用PHP 5.4我将在天堂; array_keys($array)[0];,但不幸的是,这当然也不是一种选择.
我可以创建一个函数来实现这个目的,但我只能想象有一些PHP的array_*函数可以在单个语句中产生所需的结果,这是我想不到的或者想出来的.
所以:
$array = array('foo' => 'bar', 'hello' => 'world');
$firstKey = assorted_functions($array); // $firstKey = 'foo'
Run Code Online (Sandbox Code Playgroud)
在我的问题中"无参考"条款的原因只是因为我认为array_keys()是必需的(如果有一种方式通过参考,请消防)
我会使用key(),但这需要一个,reset()因为我不确定此操作时指针的位置.
附录
我正在跟进我最近的一个实现:正如我在评论中提到的,它将使用相同的内存,所以如果这是一个问题,这个问题没有解决方案.
$a = range(0,99999);
var_dump(memory_get_peak_usage()); // int(8644416)
$k = array_keys($a)[0];
var_dump(memory_get_peak_usage()); // int(17168824)
Run Code Online (Sandbox Code Playgroud)
我知道这一点,因为PHP没有这样的优化功能,但认为有必要明确提及.
接受的答案的简洁性很好,如果你正在使用合理大小的数组,那么它们就可以工作了.
所以,我第一次使用PHP,我正在尝试检索并显示数组的值.经过大量的谷歌搜索,我能找到的唯一方法是print_r,var_dump或者var_export.但是,所有这些方法都返回如下所示的内容:
[a] => apple
[b] => banana
[c] => orange
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何设计出这种风格.我需要去除[a] =>部分并添加逗号.我知道这必须是一个非常简单的过程,但我无法找到任何演示如何操作的文档.
可能重复:
如何从JSON测试空Javascript对象?
在Javascript中是否有一种简单的方法来检查对象是否没有属性?或者换句话说,检查地图/关联数组是否为空的简单方法?例如,假设您有以下内容:
var nothingHere = {};
var somethingHere = {foo: "bar"};
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法来判断哪一个是"空的"?我唯一能想到的是这样的事情:
function isEmpty(map) {
var empty = true;
for(var key in map) {
empty = false;
break;
}
return empty;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法(像本地财产/功能或其他东西)?
在python中我可以做类似的事情myMap = {key: [value1, value2]},然后访问value2使用myMap[key][1]
我可以在javascript中做这样的事情吗?
我正在编写一个返回id,name对的函数.
我想做点什么
$a = get-name-id-pair()
$a.Id
$a.Name
Run Code Online (Sandbox Code Playgroud)
喜欢在javascript中可能.或至少
$a = get-name-id-pair()
$a["id"]
$a["name"]
Run Code Online (Sandbox Code Playgroud)
喜欢在PHP中可能.我可以用PowerShell做到吗?
即,以下代码如何:
var sup = new Array(5);
sup[0] = 'z3ero';
sup[1] = 'o3ne';
sup[4] = 'f3our';
document.write(sup.length + "<br />");
Run Code Online (Sandbox Code Playgroud)
输出'5'作为长度,当你所做的就是设置各种元素?
我对此代码的"问题"是,我不理解如何在length不调用getLength()或setLength()方法的情况下进行更改.当我执行以下任何操作时:
a.length
a['length']
a.length = 4
a['length'] = 5
Run Code Online (Sandbox Code Playgroud)
在非数组对象上,它的行为类似于dict/associative数组.当我在数组对象上执行此操作时,它具有特殊含义.JavaScript中的哪种机制允许这种情况发生?javascript是否有某种类型的属性系统进行翻译
a.length
a['length']
Run Code Online (Sandbox Code Playgroud)
进入"获取"方法和
a.length = 4
a['length'] = 5
Run Code Online (Sandbox Code Playgroud)
进入"设置"方法?
我正在研究代码来管理一系列独特的对象.这段代码的第一个原型使用了一个关联数组,基本上就像我一直这样做的那样.
但是,我也热衷于利用已经添加到更现代版本的PHP中的功能,例如SplObjectStorage来实现这一目的,部分原因在于学习体验,部分原因在于它必然会提供优势(我已经看到基准测试表明在很多情况下,SplObjectStorage可以比数组更快.
当前实现有一个关联数组,我在in_array中检查它是否在向对象添加新对象之前是否已经在数组中.
最大的问题,我可以SplObjectStorage看到的是,它似乎并没有(乍)支持键/值关联数组的行为,只能被视为一个索引数组.但是,PHP较新功能的文档不符合语言中较为成熟的部分的文档标准,我可能只是遗漏了一些东西.
我可以使用SplObjectStorage代替关联数组吗?如果是这样,我如何在添加新对象时定义键?更重要的是,与关联数组相比,SplObjectStorage的相对优势和劣势是什么?
好吧,我从节点服务器获取一个关联数组,并尝试在Jade中呈现它.我显然需要一个foreach循环,但似乎没有任何工作!我尝试了这两个代码:
- foreach row in rows {
li= row
- }
Run Code Online (Sandbox Code Playgroud)
和
- rows.forEach(function(item)) {
li= item
- })
Run Code Online (Sandbox Code Playgroud)
我传递的数组称为"行".知道为什么这不起作用吗?我收到此错误:
500 SyntaxError: Unexpected identifier
Run Code Online (Sandbox Code Playgroud)
并且,使用第二个代码:
500 SyntaxError: Unexpected token )
Run Code Online (Sandbox Code Playgroud) 据我所知,有没有associative arrays在javascript,只是objects.
但是,我可以像这样array使用字符串键创建bracket notation:
var myArray = [];
myArray['a'] = 200;
myArray['b'] = 300;
console.log(myArray); //prints [a: 200, b: 300]
Run Code Online (Sandbox Code Playgroud)
所以,我想在不使用的情况下做同样的事情 bracket notation
var myNewArray = [a: 200, b: 300]; //getting error - Unexpected token:
Run Code Online (Sandbox Code Playgroud)
这也行不通
var myNewArray = ['a': 200, 'b': 300]; //same error, why can I not create?
Run Code Online (Sandbox Code Playgroud) 我对Redis的所有可用存储选项感到困惑.我想做一些简单的事情,我不想过度设计它.我正phpredis和我一起工作Redis v2.8.6.
我有这个简单的关联数组,我需要存储.我还需要能够通过其键检索项目并循环遍历所有项目.
$a = array(
'12345' => array(
'name' => 'Post A',
'val2' => 'blah blah',
'val3' => 'blah blah blah',
),
'54321' => array(
'name' => 'Post B',
'val2' => 'blah blah',
'val3' => 'blah blah blah',
),
'998877' => array(
'name' => 'Post C',
'val2' => 'blah blah',
'val3' => 'blah blah blah',
)
);
Run Code Online (Sandbox Code Playgroud)
所以我到现在所做的是使用hash类型.像这样存储我的数组:
foreach ($a as $key => $value) {
$this->redis->hSet('posts', $key, json_encode($value));
}
Run Code Online (Sandbox Code Playgroud)
就像我可以轻松地像这样访问密钥:
public function getPost($postId) …Run Code Online (Sandbox Code Playgroud)