我有一个名为 a.txt 的文件,如下所示
7A1123123asd 14
8aasdasdasd 15
Run Code Online (Sandbox Code Playgroud)
现在我编写了一些 bash 代码来读取该文件并根据其中的值构建一个关联数组
#!/bin/bash
declare -a counter
while read DEAL count; do
counter["$DEAL"]=$count
done < oasload.job
for i in "${!array[@]}"
do
echo "key : $i"
echo "value : ${array[$i]}"
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我运行时出现以下错误
test.sh: line 6: 7A1123123asd: value too great for base (error token is "7A1123123asd")
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。
我想创建一个日历视图,如下例所示:http ://bl.ocks.org/4063318 :

其实我正在尝试修改它。
我有一个像这样的关联数组:#AdminCourt[["2012-10-02", 2], ["2012-10-09", 2], ["2012-10-16", 1]] #ConstituentAssembly[["2012-10-02", 2], ["2012-10-09", 2], ["2012-10-12", 2], ["2012-10-16", 2]]
我尝试像这样填写日历:
BigWordsDates2.map(function(d) {
return {
date: d[0],
close: d[1]
};
var data = d3.nest()
.key(function(d) { return d.Date; })
.rollup(function(d) { return (d.Close - 0); });
rect.filter(function(d) { return d in data; })
.attr("class", function(d) { return "day " + color(data[d]); })
.select("title")
.text(function(d) { return d + ": " + percent(data[d]); });
});
Run Code Online (Sandbox Code Playgroud)
我知道我没有循环遍历数组,我不知道我如何尝试每个数组,但似乎我没有正确理解它。
以下是我需要你帮助的事情:)
我可以使用zsh单个命令轻松转储关联数组的内容:
zsh% typeset -A foo
zsh% foo=(a 1 b 2)
zsh% typeset foo
foo=(a 1 b 2 )
Run Code Online (Sandbox Code Playgroud)
然而,尽管搜索高低,我能找到的最好的是declare -p,其输出包含declare -A:
bash$ typeset -A foo
bash$ foo=([a]=1 [b]=2)
bash$ declare -p foo
declare -A foo='([a]="1" [b]="2" )'
Run Code Online (Sandbox Code Playgroud)
是否有一种干净的方法来获取类似输出zsh(理想情况下foo=(a 1 b 2 )或foo='([a]="1" [b]="2" )')之类的内容,最好不诉诸字符串操作?
PHP 数组的整数索引和字符串索引有什么区别(当然后者被称为associative array)?
例如,以下两个数组有什么区别:
$intIndex[5] = "Hello";
$intIndex[6] = "World";
$intIndex[7] = "!";
Run Code Online (Sandbox Code Playgroud)
和
$strIndex['5'] = "Hello";
$strIndex['6'] = "World";
$strIndex['7'] = "!";
Run Code Online (Sandbox Code Playgroud)
在第一种情况下, 会发生$intIndex[0]什么$intIndex[4]?
我一整天都在努力merge function为多维数组创建一个。这个场景有点不同,很难用语言来描述。相反,我将尝试用一个实际的例子来解释它。
$actual_array = [
'assets' => [1, 2, 3],
'liabilities' => [1, 2, 3, 4, 5, 6],
'equity' => [1],
'income' => [1, 2, 3, 4],
'expenses' => [1, 2, 3]
];
$merge = [
'balance_sheet' => ['assets', 'liabilities', 'equity'],
'income' => ['income', 'expenses'],
];
self::merge( $merge, $actual_array );
Run Code Online (Sandbox Code Playgroud)
该函数将合并指定的列,然后转置和填充结果。
public static function merge( array $merges, array $data )
{
$bigger_array_length = 0;
$arr = [];
$columns = [];
foreach ($merges as $key => $merge) {
foreach …Run Code Online (Sandbox Code Playgroud) php arrays transpose associative-array multidimensional-array
我有一个 bash 脚本,它使用文件名作为关联数组中的键。一些文件名中有引号,我似乎找不到任何方法来取消它们。
这是从终端复制问题的示例:
$ declare -A x
$ y="key with spaces"
$ z="key with spaces and ' quote"
$ x[$y]=5 # this works fine
$ x[$z]=44 # as does this
$ echo "${x[$y]}" "${x[$z]}" # no problems here
5 44
$ unset x["$y"] # works
$ unset x["$z"] # does not work
bash: unset: `x[key with spaces and ' quote]': not a valid identifier
$ echo "${x[$y]}" "${x[$z]}" # second key was not deleted
44
Run Code Online (Sandbox Code Playgroud)
在我的脚本中处理的文件名是任意的,无论它们包含什么字符都需要工作(在合理范围内,至少需要使用可打印的字符。) unset 用于清除具有某些属性的文件上的标志。
当它们可能包含引号时,如何让 …
使用 bash,可以将数组存储在字典中吗?我已经展示了一些从字典中获取数组的示例代码,但它似乎失去了它是一个数组的事实。
我希望这是dict+=(["pos"]="${array[@]}")命令,但不确定如何执行此操作或什至可能。
# Normal array behaviour (just an example)
array=(1 2 3)
for a in "${array[@]}"
do
echo "$a"
done
# Outputs:
# 1
# 2
# 3
# Array in a dictionary
declare -A dict
dict+=(["pos"]="${array[@]}")
# When I fetch the array, it is not an array anymore
posarray=("${dict[pos]}")
for a in "${posarray[@]}"
do
echo "$a"
done
# Outputs:
# 1 2 3
# but I want
# 1
# 2
# 3
Run Code Online (Sandbox Code Playgroud) 我最近不得不解决遗留 PHP 应用程序中的错误。此应用程序接收来自另一个应用程序的请求,其 JSON 格式为:
{
"someList": [
"item A",
"item B"
],
"ratings": {
"0": 0.001234,
"1": 0.0666,
"2": 0.09876,
"3": 0.777777
}
}
Run Code Online (Sandbox Code Playgroud)
当它反序列化为原生 PHP “关联数组”时,列表和映射(键为 0、1、2 和 3)看起来都像列表。没关系,我可以解决这个问题。但是,此应用程序会对此数据进行计算,并在以大致相同的格式将其序列化回 JSON 并将其发送到另一个应用程序之前对其进行更多计算。这就是问题所在。json_encode($data)上述结果的开箱即用:
{
"someList": [
"item A",
"item B"
],
"ratings": [
0.001234,
0.0666,
0.09876,
0.777777
]
}
Run Code Online (Sandbox Code Playgroud)
我的钥匙都没了...
我看到我可以使用JSON_FORCE_OBJECTlaecho json_encode($data, JSON_FORCE_OBJECT)但后来我得到:
{
"someList": {
"0": "item A",
"1": "item B"
},
"ratings": {
"0": 0.001234,
"1": 0.0666,
"2": 0.09876,
"3": 0.777777
} …Run Code Online (Sandbox Code Playgroud) 目标:
我想做的就是检查关联数组USER_PARAMETERS_KEYs[j]中是否存在a RPM_PARAMETERS_HASH
。我有一个数组和一个关联数组,如下所示:
预定义:
declare -a USER_PARAMETERS_KEYS='([0]="userField" [1]="fUserField" [2]="srcIPField" [3]="srcPortField" [4]="dstIPField" [5]="dstPortField" [6]="dateField" [7]="timeField")'
declare -A RPM_PARAMETERS_HASH='([timeField]="Time" [userField]="User-Name" [dstIPField]="" [srcIPField]="Source-IP-Address" [dstPortField]="Target-UDP-Port" [fUserField]="Full-Name" [dateField]="Date" [srcPortField]="Source-UDP-Port" )'
Run Code Online (Sandbox Code Playgroud)
我实施了以下措施:
if [[ ${RPM_PARAMETERS_HASH[${USER_PARAMETERS_KEYS[j]}]} ]] ; then
Run Code Online (Sandbox Code Playgroud)
问题
我的问题是当${USER_PARAMETERS_KEYS[j]}变得等于时dstIPField,因为它在关联数组中有一个空字符串值,所以尽管键在那里,但不满足 if 条件。
我正在创建关联数组以在 for 循环中进行处理,但我在索引顺序中得到了一些奇怪的结果。请看一下这个示例脚本:
#!/bin/bash
declare -A test1=(
[d]=1w45
[e]=2dfg
[m]=3df
[o]=4df
)
declare -A test2=(
[d1]=1w45
[e2]=2dfg
[m3]=3df
[o4]=4df
)
declare -A test3=(
[1d]=1w45
[2e]=2dfg
[3m]=3df
[4o]=4df
)
echo ${!test1[@]}
echo ${!test2[@]}
echo ${!test3[@]}
Run Code Online (Sandbox Code Playgroud)
输出将是
$ ./test
d e m o
o4 m3 e2 d1
3m 4o 1d 2e
Run Code Online (Sandbox Code Playgroud)
为什么项目的顺序会改变?以及如何绕过这种行为?提前致谢!