在php中,可以使用关联数组处理状态名称列表及其缩写,如下所示:
<?php
$stateArray = array(
"ALABAMA"=>"AL",
"ALASKA"=>"AK",
// etc...
"WYOMING"=>"WY"
);
foreach ($stateArray as $stateName => $stateAbbreviation){
print "The abbreviation for $stateName is $stateAbbreviation.\n\n";
}
?>
Run Code Online (Sandbox Code Playgroud)
输出(保留密钥顺序):
The abbreviation for ALABAMA is AL.
The abbreviation for ALASKA is AK.
The abbreviation for WYOMING is WY.
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,数组元素的顺序保留在php版本的输出中.使用HashMap的Java实现不保证元素的顺序.Python中的字典也不是.
这是如何在java和python中完成的?我只找到提供价值的方法,给定密钥,如python:
stateDict = {
"ALASKA": "AK",
"WYOMING": "WY",
}
for key in stateDict:
value = stateDict[key]
Run Code Online (Sandbox Code Playgroud)
编辑:基于答案,这是我在python中的解决方案,
# a list of two-tuples
stateList = [
('ALABAMA', 'AL'),
('ALASKA', 'AK'),
('WISCONSIN', 'WI'),
('WYOMING', 'WY'),
] …Run Code Online (Sandbox Code Playgroud) 我想在特定条目中获取关联PHP数组的KEY值.具体来说,我知道我需要的KEY是数组中第二个条目的关键.
例:
$array = array('customer' => 'Joe', 'phone' => '555-555-5555');
Run Code Online (Sandbox Code Playgroud)
我正在建设的是超级动态的,所以我不知道第二个条目是"电话".抓住它有一个简单的方法吗?
简而言之,(我知道它不起作用,但是......)我正在寻找功能相当的东西: key($array[1]);
我想做一些看似非常简单的事情,但我找不到任何关于它的东西:只需提取类似于array_splice的数组子集,但使用键来检索值:
$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,
/* many more data I don't need here ... */);
list($name, $age, $id) = array_splice_by_keys($data,
array('personName', 'personAge', 'personId');
Run Code Online (Sandbox Code Playgroud)
如果所有其他方法都失败了,是不是有内置函数来按键过滤关联数组?例如:
$ filteredArray = array__extract__keys__and__values($ srcArray,$ arrayOfWantedKeys);
// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
array('personName', 'personAge', 'personId');
echo $wanted_values['personName'];
Run Code Online (Sandbox Code Playgroud)
我想我想要做第一个的原因是我不喜欢在我的代码中重复关联数组访问,看起来更好地优化复制大量使用的值(例如循环中) ),到一个局部变量,加上它比$ somearray ['name']更容易输入$ name.
编辑:谢谢,我想与列表一起使用,解决方案将是
list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));
Run Code Online (Sandbox Code Playgroud)
不感兴趣使用array_flip!
我现在正试图这样做,我想知道是否有一个"最常用"的方法将一个关联数组(它的值)连接成一个由字符分隔的字符串.
例如,我有
var AssocArray = { id:0, status:false, text:'apple' };
Run Code Online (Sandbox Code Playgroud)
连接此对象的元素所产生的字符串将是
"0, false, 'apple'" or "0, 0, 'apple'"
Run Code Online (Sandbox Code Playgroud)
如果我们用","字符加入他们任何想法?谢谢!
我有一个非常基本的问题,但我被卡住了.我是php的新手,我有一个像这样的数组:
$array = array(
'one' => 1,
'two' => array('key1' => 'val1','key2' => 'val2'),
'three' => array('key1' => 'val1','key2' => 'val2'),
'four' => array('key1' => 'val1','key2' => 'val2')
);
Run Code Online (Sandbox Code Playgroud)
对于数组中的每个数组(即'two,'three'和'four'),我想在这些数组中插入'key3'=>'val3'.
我试过这个:
foreach($array as $item) {
if (gettype($item) == "array") {
$item['key3'] = 'val3';
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用,我不知道为什么.在整个地方使用各种print_r,如果我在循环中打印它,似乎将'key3'=>'val3'插入$ item,但原始数组似乎没有变化.我也试过一个常规的循环,但这也不起作用.
我试图在一个查询中选择数据到pl/sql关联数组.我知道我可以使用硬编码密钥执行此操作,但我想看看是否有某种方法可以引用另一列(键列).
DECLARE
TYPE VarAssoc IS TABLE OF varchar2(2) INDEX BY varchar2(3);
vars VarAssoc;
BEGIN
SELECT foo, bar INTO vars(foo) FROM schema.table;
END;
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,说当我这样做时必须声明foo.有没有办法在单个查询中创建我的关联数组,还是需要回退到FOR循环?
我有一个由表列的行类型创建的关联数组.
举个例子,它就是这样的(表名不同,但结构是一样的):
这是表的DDL
CREATE TABLE employees
(
id NUMBER,
name VARCHAR2(240),
salary NUMBER
);
Run Code Online (Sandbox Code Playgroud)
这是我的程序正在做的事情:
DECLARE
TYPE table_of_emp
IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp TABLE_OF_EMP;
BEGIN
IF emp IS NULL THEN
dbms_output.Put_line('Null associative array');
ELSE
dbms_output.Put_line('Not null');
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
我认为这应该导致打印"Null associative array".但是,if条件失败并且执行跳转到else部分.
现在,如果我放入一个for循环来打印集合值
DECLARE
TYPE table_of_emp
IS TABLE OF employees%ROWTYPE INDEX BY BINARY_INTEGER;
emp TABLE_OF_EMP;
BEGIN
IF emp IS NULL THEN
dbms_output.Put_line('Null associative array');
ELSE
dbms_output.Put_line('Not null');
FOR i IN emp.first..emp.last …Run Code Online (Sandbox Code Playgroud) 这是我迄今为止和鞋的类型是boots, wellingtons, leather, trainers (in that order)
我想迭代并分配值,所以我有类似的东西
var shoeArray = { boots : '3', wellingtons: '0', leather : '1', trainers: '3'};
Run Code Online (Sandbox Code Playgroud)
目前我只是得到一个{3,0,1,3}我可以使用的数组,但它不是很有帮助.
function shoe_types() {
var shoeArray = [];
$('[type=number]').each(function(){
$('span[data-field='+$(this).attr('id')+']').text($(this).val());
shoeArray.push ( parseInt($(this).val()) );
});
return shoeArray;
}
Run Code Online (Sandbox Code Playgroud) 如何在JS中执行以下操作?我想模仿.pop()一个对象而不是一个数组.
var deck = {
'cardK' :'13',
'cardQ' :'12',
'cardAJ':'11'
};
var val = deck.pop();
console.log("Key" + val.key );
console.log("Value" + val.val );
Run Code Online (Sandbox Code Playgroud)
看来这是不可能的.
我想创建一个函数createAssociativeArray,它将返回两个参数:string和object,像这样:
function createAssociativeArray(string, object) {
//...
}
Run Code Online (Sandbox Code Playgroud)
最后一项string应该获取object数据.查看使用/返回示例:
createAssociativeArray('key1.key2.key3', {
data1: 1,
data2: 2,
data3: 3
});
// key1: {
// key2: {
// key3: {
// data1: 1,
// data2: 2,
// data3: 3
// }
// }
// }
Run Code Online (Sandbox Code Playgroud)
什么是最简单,最健壮的方法?
使用eval不是可能的.
我尝试了什么:
function createAssociativeArray(string, object) {
string = string.split('.');
return string.reduce(function(_object, _target, i) {
_object[_target] = (i + 1 === string.length ? object : {});
return …Run Code Online (Sandbox Code Playgroud)