我想重写offsetSet($index,$value)从ArrayObject这样的:offsetSet($index, MyClass $value)但它会产生一个致命错误("声明必须是兼容").
我正在尝试创建一个ArrayObject子类,强制所有值都是某个对象.我的计划是通过覆盖所有添加值并为其提供类型提示的函数来执行此操作,因此您无法添加除值之外的任何内容.MyClass
第一站:append($value);
来自SPL:
/**
* Appends the value
* @link http://www.php.net/manual/en/arrayobject.append.php
* @param value mixed <p>
* The value being appended.
* </p>
* @return void
*/
public function append ($value) {}
Run Code Online (Sandbox Code Playgroud)
我的版本:
/**
* @param MyClass $value
*/
public function append(Myclass $value){
parent::append($value);
}
Run Code Online (Sandbox Code Playgroud)
似乎像魅力一样工作.
第二站: offsetSet($index,$value);
再次,从SPL:
/**
* Sets the value at the specified index to newval
* @link …Run Code Online (Sandbox Code Playgroud) 我的数据在 中ArrayObject,简单地表示一个数组。我需要过滤数据,函数array_filter()会很好用。然而,它不起作用作为参数使用ArrayObject。治疗这种情况最好的方法是什么?是否有任何标准函数可以为我处理过滤?
例子:
$my_data = ArrayObject(array(1,2,3));
$result = array_object_filter($my_data, function($item) { return $item !== 2; });
Run Code Online (Sandbox Code Playgroud)
有什么array_object_filter功能吗?
我想知道是什么getIterator(),我会解释:
据我所知,getIterator我们称之为一种方法,包括一个外部迭代器.
问题是getIterator包含它自己的方法,闭包认为看起来是相同的Iterator接口,但它不能是一个接口,它可以是类,但我试图在SPL.php源代码中搜索它,但没有找到任何,也许我让它变得比实际更复杂,如果有人可以帮助我理解它在SPL.php源代码中的位置以及它是什么(类等),我会很高兴.谢谢大家,祝你有个愉快的一天.
我有这样的自定义类 -
class Event: NSObject
{
var eventID: String?
var name:String?
}
Run Code Online (Sandbox Code Playgroud)
现在我有一个Event像对象的数组
var events = [Event]()
var event1 = Event()
event1.eventID = "1"
event1.name = "Anu"
var event2 = Event()
event2.eventID = "2"
event2.name = "dev"
var event3 = Event()
event3.eventID = "1"
event3.name = "Anu"
events.append(event1)
events.append(event2)
events.append(event3)
Run Code Online (Sandbox Code Playgroud)
从数组中获取unque eventID我已经编写了这样的代码,它工作得很好 -
func getUniqueIDsFromArrayOfObjects(events:[Event])->NSArray
{
let arr = events.map { $0.eventID!}
let uniquearr:NSMutableArray = NSMutableArray()
for obj in arr
{
if !uniquearr.containsObject(obj) {
uniquearr.addObject(obj)
}
}
return …Run Code Online (Sandbox Code Playgroud) 正如标题所说,你如何执行array_unshift()上arrayObject,array_push()由做一个获得arrayObject->append()但对于不印字?
编辑:我忘了提到的是,在这种特殊情况下我还需要保留现有密钥.
我收到了这个通知:
ArrayIterator :: next():数组在对象外被修改,内部位置在/ var/www中不再有效...
这是由foreach循环开始时由此代码生成的.与通知一起,foreach循环开始重复迭代.换句话说,只要发生这种情况,就会重置内部位置.但根据php手册,ArrayObject默认使用ArrayIterator.
手册说这是关于ArrayIterator的
这个迭代器允许在迭代Arrays和Objects时取消设置和修改值和键.
我在这里错过了什么吗?我发现了一些关于ArratIterator的bug报告,但不是这种.这是一个错误还是我的坏?
版本:PHP版本5.3.10-1ubuntu3.4
<?php
//file 1:
// no namespace
abstract class holder extends \ArrayObject{
// abstract function init();
public function __construct($init){
parent::__construct($init, 1);
}
}?>
<?php
//file 2:
namespace troops;
class holder extends \holder{
public function __construct(){
parent::__construct($this->init());
}
private function init(){
return array( /*... some data from db ...*/ );
}
public function saveData(){
foreach($this as $k => $v){
$this->save($v);
if($v->number_of_items==0) {
unset($k);
// $this->offsetUnset($k); // tryed both
}
}
}
} …Run Code Online (Sandbox Code Playgroud) 我正在使用expedia API并且它运行良好,但我不知道如何访问这种特殊类型的数组键.回复如下
$response =
stdClass Object
(
[@size] => 1
[@activePropertyCount] => 144
[city] => 1
[@hotelId] => 12345
[HotelSummary] => stdClass Object
(
[@order] => 0
[@ubsScore] => 1074874
[hotelId] => 151689
[RoomRateDetailsList] => stdClass Object
(
[RoomRateDetails] => stdClass Object
(
[roomTypeCode] => 195577
[rateCode] => 202369379
[maxRoomOccupancy] => 3
[quotedRoomOccupancy] => 2
[minGuestAge] => 0
[roomDescription] => Deluxe Room
[propertyAvailable] => 1
[propertyRestricted] =>
[expediaPropertyId] => 526332
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
我想在'city'键下访问@hotelId的值,但我不能
我试过两种类型,但两次失败都没有
$response->hotelId
and
$response->@hotelId
Run Code Online (Sandbox Code Playgroud)
请帮帮我..提前谢谢你
我了解将对象添加到数组所需的命令。我知道它的array.push(object).
但是,假设我有这个对象数组:
const artists = [{
"rank": 1,
"name": "Rakim",
"year": 1985,
"album": "Paid in Full",
},
{
"rank": 2,
"name": "Nas",
"year": 1994,
"album": "Illmatic"
}
]Run Code Online (Sandbox Code Playgroud)
如果我需要添加一个具有功能的新功能。我该怎么做?我想让它成为一个功能,允许我在未来添加多个。
所以像,
function addArtist(array {}) {
return array;
}
console.log(addArtist(array {
new object here
}));
Run Code Online (Sandbox Code Playgroud) 我有这样的数组
var data = [
{
name: "Movies", info: "category_name",
content: [
{ name: "Interstellar", info: "category_data" },
{ name: "Dark Knight", info: "category_data" },
]
},
{
name: "Music", info: "category_name",
content: [
{ name: "Adams", info: "category_data" },
{ name: "Nirvana", info: "category_data" },
]
},
{
name: "Places", info: "category_name",
content: [
{ name: "Jordan", info: "category_data" },
{ name: "Punjab", info: "category_data" },
]
},
]
Run Code Online (Sandbox Code Playgroud)
并希望将其变成这样
var transformedArray= [
{ name: "Movies", info: "category_name" }, …Run Code Online (Sandbox Code Playgroud) 我有一个对象数组,我想要对其中一个属性的值求和.这是一张将显示数组结构的图片.
这是我的代码,但不起作用.
print_r($res);//this appear the structure of array,which i will show.
$sum = 0;
foreach($res as $key=>$value){
if(isset($value->sent))
$sum += $value->sent;
}
echo $sum;
Run Code Online (Sandbox Code Playgroud) arrayobject ×10
php ×7
arrays ×4
spl ×3
javascript ×2
array-filter ×1
array-key ×1
function ×1
ios ×1
object ×1
overriding ×1
swift ×1