我有一个SQL查询和一个mysqli预处理语句:
$sql = 'SELECT photographers.photographer_id, photographers.photographer_name
FROM photographers';
$stmt = $conn->stmt_init();
if ($stmt->prepare($sql)) {
$stmt->bind_result($photographer_id, $photographer_name);
$OK = $stmt->execute();
$stmt->fetch();
}
Run Code Online (Sandbox Code Playgroud)
如何将结果存储在关联数组中,以便稍后循环并获取sql字符串返回的所有数据?
在计算机科学中,字图有两种定义.第一个是关联数组,一种容器类型,它将一种类型的值映射到另一种类型的值.一个例子是STL地图.第二个定义来自函数式编程,其中map是一个获取列表和函数的函数,按顺序将函数应用于列表的所有元素,并返回结果列表.
地图的不同定义的起源是什么?我猜测第二个定义可能来自McCarthy LISP的mapcar函数,但我不确定这是否来自另一个有用的.第一个定义对我来说很直观,但我不确定它的来源.
我有以下XML:
<account>
<id>123</id>
<email></email>
<status>ACTIVE</status>
</account>
Run Code Online (Sandbox Code Playgroud)
我想把它作为一个数组变量.因此我读了它$xml = simplexml_load_file().将simpleXMLElement转换为关联数组的最简单方法是我用以下方法来研磨它:json_decode(json_encode((array) $xml),1);
问题是我不希望将email密钥作为空数组获取,而是作为NULL值.作为SimpleXMLElement,它看起来像:
public 'email' =>
object(SimpleXMLElement)[205]
Run Code Online (Sandbox Code Playgroud)
而在数组中它看起来像:
'email' =>
array (size=0)
empty
Run Code Online (Sandbox Code Playgroud)
我想得到:
'email' => NULL
Run Code Online (Sandbox Code Playgroud)
实现这一点的唯一方法我想到的是遍历所有元素并用空值替换空数组.问题是我的XML更大(上面只是解释问题)而且我必须迭代很多XML元素(这将是手工工作 - 我正在寻找自动化的东西).也许我错过了其中一个功能中的一些选项...或者可能还有另一个技巧可以做到这一点?
有没有人知道一种优雅的方式来组合两个关联数组,bash就像你正常的数组一样?这就是我在说的:
在bash中,您可以组合两个常规数组,如下所示:
declare -ar array1=( 5 10 15 )
declare -ar array2=( 20 25 30 )
declare -ar array_both=( ${array1[@]} ${array2[@]} )
for item in ${array_both[@]}; do
echo "Item: ${item}"
done
Run Code Online (Sandbox Code Playgroud)
我想用两个关联数组做同样的事情,但是下面的代码不起作用:
declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true )
declare -Ar array_both=( ${array1[@]} ${array2[@]} )
for key in ${!array_both[@]}; do
echo "array_both[${key}]=${array_both[${key}]}"
done
Run Code Online (Sandbox Code Playgroud)
它给出以下错误:
./associative_arrays.sh:line 3:array_both:true:分配关联数组时必须使用下标
以下是我提出的解决方法:
declare -Ar array1=( [5]=true [10]=true [15]=true )
declare -Ar array2=( [20]=true [25]=true [30]=true ) …Run Code Online (Sandbox Code Playgroud) 我正在使用带标题的数组.每个标题索引对应于数据库中的id,该id包含该给定标题的html.
假设我有一个包含其中一个标题的字符串.
title = "why-birds-fly";
titles[] // an array which contains all the titles
Run Code Online (Sandbox Code Playgroud)
要使用字符串"title"来获取相应的ID,我可以这样做:
for (i = 0; i < titles.length-1; i++) {
if (titles[i] == title)
return i+1;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用的另一种方法是创建一个关联数组和titles数组,这与titles完全相反.也就是说,它使用字符串作为索引并返回数字.
titles_id {blah:0,why-birds-fly:1,blah2:2}
Run Code Online (Sandbox Code Playgroud)
然后我可以通过以下方式访问ID:
return titles_id[title]+1;
Run Code Online (Sandbox Code Playgroud)
考虑到CPU,内存等,最有效的是什么?
另外,如果我的逻辑完全错误,请告诉我.
谢谢威廉
在Javascript中我有一个JSON对象,我只想从中处理这些项目:
var json = {
itema: {stuff: 'stuff'},
itemb: {stuff: 'stuff'},
itemc: {stuff: 'stuff'},
itemd: {stuff: 'stuff'}
}
Run Code Online (Sandbox Code Playgroud)
在Python中,我可以做到
print json.items()
[{stuff: 'stuff'},{stuff: 'stuff'},{stuff: 'stuff'},{stuff: 'stuff'}]
Run Code Online (Sandbox Code Playgroud)
我能这样做是js吗?
在这个问题中,我讨论了javaScript中相关数组和对象的概念,我有点困惑.
在此示例代码中:
var check = {
pattern : {
name: /^[a-zA-Z-\s]{1,20}$/,
email: /^[a-zA-Z0-9._(-)]+@[a-zA-Z0-9.(-)]+\.[a-zA-Z]{1,4}$/,
pass: /.{6,40}/,
url: /^[(-)\w&:\/\.=\?,#+]{1,}$/,
aml: /<(.+)_([a-z]){1}>$/
}
};
Run Code Online (Sandbox Code Playgroud)
这是讨论让我困惑:
@ steven.yang外部对象不是样本中的关联数组,但这就是要求的内容
@sissonb你的意思是'外部对象不是一个关联数组'?我认为关联数组在javascript中表示为对象.不同之处在于符号 - 通过
foo.bar或foo[bar]@ steven.yang关联数组意味着key => value.http://en.wikipedia.org/wiki/Associative_array你的内部对象有一个模式的键,包含这个关联数组的对象没有键.
关联数组被定义为键值对,object在JavaScript中表示.
分配给的外部对象check具有键pattern和另一个对象的值.内对象具有的键name,email...和正则表达式对象的相应的值.
两个对象都可以算作关联数组吗?
我有这个数组:
$opening_hours = array(
'Monday' => array('09:00', '17:00'),
'Tuesday' => array('09:00', '17:00'),
'Wednesday' => array('08:00', '13:00'),
'Thursday' => array('09:00', '17:00'),
'Friday' => array('09:00', '17:00'),
'Saturday' => array('10:00', '16:00'),
'Sunday' => array('Closed'),
);
Run Code Online (Sandbox Code Playgroud)
我需要以某种方式将这些开放时间合并到数组中,这应该是这样的:
$merged_opening_hours = array(
'Monday - Tuesday' => array('09:00', '17:00'),
'Wednesday' => array('08:00', '13:00'),
'Thursday - Friday' => array('09:00', '17:00'),
'Saturday' => array('10:00', '16:00');
'Sunday' => array('Closed'),
);
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
假设我有100组3个值.第一个值是时间,第二个值是x位置,第三个值是y位置.例如,这将是一个超过100秒的点的xy位置.我有PHP背景.在PHP中,我会使用这样的3D关联数组:
position["time"]["x"]["y"]
Run Code Online (Sandbox Code Playgroud)
所以我可以在特定时间访问x,y值.你会如何在c#中做到这一点?我认为像列表和字典这样的泛型会做到这一点.但我不知道如何为3D数据集实现键值.
我们正在升级到 PHP 8.1。一个新功能是未定义的数组键会引发警告。
不幸的是,这会妨碍轻松使用关联数组(例如 $_SESSION 变量)的能力。我了解预定义变量的优点,并且不寻求对这些优点进行讨论。关联数组的想法是,您可以轻松地将内容添加到会话中,并且所有未分配的内容都会被评估为 null。但现在它也发出了警告;必须采取一些措施来解决这个问题。
这是一些代码的示例:
$_SESSION['is_condition'] = true;
Run Code Online (Sandbox Code Playgroud)
在代码的另一个地方,出现以下情况
if ($_SESSION['is_condition']) ...
Run Code Online (Sandbox Code Playgroud)
如果这种情况发生在“is_condition”会话变量尚未定义的上下文中,则将其值评估为 null 的期望结果就是我们想要的。但现在必须采取其他措施来处理它未定义的可能性。
有几种方法可以处理这个问题:
预定义所有值为 null 的会话变量。看起来这不是关联数组的精神。现在每个脚本都必须调用一组冗长的代码。
每当需要关联数组元素的值时,请使用空合并运算符。在整个代码库中放置很多很多额外的运算符是一个丑陋的要求。
更改我们的自定义错误处理函数以忽略未定义的数组键错误。抑制警告是一个非常糟糕的主意,并且会增加开销。
这些方法都不是非常理想的。
解决这个问题的理论上的方法是使用数组初始化语句,将所有可能的关联键分配为 null。我不知道有这样的事情。
我的问题是是否还缺少其他一些方法,例如仅抑制此特定警告的参数。