有人可以解释清楚的根本差异ArrayIterator,ArrayObject以及在阵列中的PHP的功能和操作方面?谢谢!
我试图在文档中理解STD_PROP_LIST常量,但到目前为止我还没理解它,并且没有找到任何解释:(文档有以下示例:
$a = new ArrayObject(array(), ArrayObject::STD_PROP_LIST);
$a['arr'] = 'array data';
$a->prop = 'prop data';
$b = new ArrayObject();
$b['arr'] = 'array data';
$b->prop = 'prop data';
// ArrayObject Object
// (
// [prop] => prop data
// )
print_r($a);
// ArrayObject Object
// (
// [arr] => array data
// )
print_r($b);
Run Code Online (Sandbox Code Playgroud)
两种印刷品都给我相同的结果:
ArrayObject Object ( [prop] => prop data [storage:ArrayObject:private] => Array ( [arr] => array data ) )
ArrayObject Object ( [prop] => prop data [storage:ArrayObject:private] => Array …Run Code Online (Sandbox Code Playgroud) (底部的例子!!!)
我们刚刚将后端升级到PHP7,之后,我们在代码中发现了一个与ArrayObject相关的错误.
代码只是循环遍历Object的一个副本(类型为native ArrayObject).foreach按值迭代.
代码的目的是过滤一些您不需要的值.在示例中,如果迭代值为"2"或"3",则取消设置.我已经尝试使用迭代器而不是复制的值而没有迭代器.
结果:
第一个循环=> $ key = 0,$ value ="one"//继续
第二个循环=> $ key = 1,$ value ="second"//未设置
第三循环=> $ key = 3,$ value ="四"// WTF?哪里是$ key = 2,$ value ="三"????
所以我无法理解发生了什么.我们的时间解决方案是迭代原始对象并从副本中取消设置.有谁知道PHP核心(或ArrayObject/ArrayIterator)中的哪个更改?我有搜索它,但有些人有foreach这个问题,迭代的项目是参考.
如果在PHP 5.6和7之间切换,则行为会发生变化.
$elements = new ArrayObject();
$elements->append('one');
$elements->append('two');
$elements->append('three');
$elements->append('four');
print_r($elements);
$clone = clone $elements;
$it = $clone->getIterator();
echo "\n------\n";
foreach ($it as $key => $value) {
echo $key."\t=>\t".$value."\n";
if ($value …Run Code Online (Sandbox Code Playgroud) 尝试使用 ES6arrayObj.sort(a,b) => a.property.localeCompare(b.property)语法但出现错误:
\n\n类型错误:a.property.localeCompare 不是函数。
\n
我想localeCompare不在范围内,但不明白如何将其绑定到排序范围,也许是因为数据存储在代理中?我也在 VueJS 3 中工作,但认为这与这个问题无关。
myData = \nProxy {0: {\xe2\x80\xa6}, 1: {\xe2\x80\xa6}, 2: {\xe2\x80\xa6}, 3: {\xe2\x80\xa6}, 4: {\xe2\x80\xa6}}\n[[Handler]]: Object\n[[Target]]: Array(5)\n0: {itemIndex: 1, itemFmt: 2, itemFmtName: 'Call To Order', guid: 'd66af412-00a0-4c49-b8b5-abaefb79fed0', maxCt: 1, \xe2\x80\xa6}\n1: {itemIndex: 2, itemFmt: 6, itemFmtName: 'Title/Discussion/Motion', guid: '9f7b9d34-3fcb-42c7-866e-a56f71a8aa4f', maxCt: 0, \xe2\x80\xa6}\n2: {itemIndex: 4, itemFmt: 6, itemFmtName: 'Title/Discussion/Motion', guid: '406bea5e-1cb0-4d90-96e9-9b80b64ff8ba', maxCt: 0, \xe2\x80\xa6}\n3: {itemIndex: 5, itemFmt: 6, itemFmtName: 'Title/Discussion/Motion', guid: 'ad9aacda-5100-4eef-9ead-c61e1ec0c285', maxCt: 0, \xe2\x80\xa6}\n4: …Run Code Online (Sandbox Code Playgroud) <?php
$a = new ArrayObject();
$a['b'] = array('c'=>array('d'));
print_r($a);
unset($a['b']['c']);
print_r($a);
Run Code Online (Sandbox Code Playgroud)
ArrayObject Object
(
[b] => Array
(
[c] => Array
(
[0] => d
)
)
)
ArrayObject Object
(
[b] => Array
(
[c] => Array
(
[0] => d
)
)
)
Run Code Online (Sandbox Code Playgroud)
您注意到$a['b']['c']即使在取消设置后仍然存在.我希望$a只剩下一个值(b).
在我的实际应用中,我收到以下警告:
间接修改MyClass的重载元素没有任何效果
在哪里MyClass延伸ArrayObject.我有很多代码依赖于能够取消设置这样的嵌套元素,所以我怎样才能使它工作?
我有一个关于ArrayObject的问题.我想在ArrayObject类中使用array_slice而我不能.有没有办法做到这一点,而无需为实现ArrayObject的类编写"切片"方法?
问题:我正在尝试扩展PHP ArrayObject,如下所示.不幸的是,我无法在设置多维对象时使其正常工作,而是因为我在PHP中启用了严格设置而引发错误.(Error: Strict standards: Creating default object from empty value)
问题:如何修改我的课程以自动为我创建不存在的级别?
代码:
$config = new Config;
$config->lvl1_0 = true; // Works
$config->lvl1_1->lvl2 = true; // Throws error as "lvl1" isn't set already
class Config extends ArrayObject
{
function __construct() {
parent::__construct(array(), self::ARRAY_AS_PROPS);
}
public function offsetSet($k, $v) {
$v = is_array($v) ? new self($v) : $v;
return parent::offsetSet($k, $v);
}
}
Run Code Online (Sandbox Code Playgroud) 我试图理解PHP中对象数组的概念.到目前为止,我只是使用常规数组循环遍历记录列表并在表格中显示它们.
我知道我可以使用Object做到这一点,但我不太清楚如何做到这一点.
我理解单个Object实例的概念,其中所有属性都表示从数据库填充的字段及其关联值,可以调用如下:
$objUser->first_name;
Run Code Online (Sandbox Code Playgroud)
现在我想了解的,根本找不到一个简单的答案是如何处理让我们说的用户列表,我想在一个页面上显示.我已经看到有ArrayObject,ArrayIterator等,但是根本无法理解它们是如何工作的,所以如果有人可以尝试用一些如何完成上述内容的例子来解释它,我将非常感激.
我正在寻找的是一个包含元素列表的对象,我可以像这样循环(如果可能的话):
foreach($objUsers as $objUser) {
echo $objUser->first_name;
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
PHP具有in_array检查本机数组/集合中是否存在特定值的函数.我正在寻找ArrayObject的等效函数/方法,但没有一个方法似乎复制此功能.
我知道我可以将ArrayObject转换为(数组)并在in_array中使用它.我也知道我可以手动迭代ArrayObject并查找值.这似乎都不是"正确"的方式.
如果你能用证据支持,"不"是一个非常恰当的答案.