我有以下对象数组。我正试图瞄准其中一个,并获取数组数据。
因此,如果我想以5659313586569216
为目标,我希望能够获取连接到它的阵列
简而言之,我想通过说我想从5659313586569216
或5722646637445120
获取[item]
。
有人能提供一些指导吗?
Array (
[0] => GDS'Entity Object (
[str_kind:GDS'Entity:private] => Item List
[str_key_id:GDS'Entity:private] => 5659313586569216
[str_key_name:GDS'Entity:private] =>
[mix_ancestry:GDS'Entity:private] =>
[arr_data:GDS'Entity:private] => Array ( [item] => 123 )
)
[1] => GDS'Entity Object (
[str_kind:GDS'Entity:private] => Item List
[str_key_id:GDS'Entity:private] => 5722646637445120
[str_key_name:GDS'Entity:private] =>
[mix_ancestry:GDS'Entity:private] =>
[arr_data:GDS'Entity:private] => Array ( [item] => 456 )
)
)
在serialize()
上使用regex很容易。如果你能显示的结果:
$arr = array(...);
echo(serialize($arr));
我可以在那里为您编写正则表达式来提取参数的名称。
根据您的实现,您可以通过字符串键id保留对新创建实体的引用,并在以后用于快速查找:
namespace GDS;
class Entity
{
private $str_key_id;
private $arr_data;
// ...
// Array of Entity instances, indexed by their string key id
static $entities_by_str_key_id = Array();
public function __construct($str_key_id, $arr_data)
{
$this->str_key_id = $str_key_id;
$this->arr_data = $arr_data;
// Keep reference by id
self::$entities_by_str_key_id[$str_key_id] = $this;
}
public function getArrDataItem()
{
return $this->arr_data['item'];
}
public static function getArrDataItemByStrKeyId($str_key_id)
{
return self::$entities_by_str_key_id[$str_key_id]->getArrDataItem();
}
}
// Create a few entities
$entities = array(
new Entity(5659313586569216, array("item" => 123)),
new Entity(5722646637445120, array("item" => 456)),
);
// Get array data item by string key id
print Entity::getArrDataItemByStrKeyId(5659313586569216) . PHP_EOL;
print Entity::getArrDataItemByStrKeyId(5722646637445120) . PHP_EOL;
输出:
123
456
如果您决定转义实际的对象数据类型,下面是一个简单的方法。基本上,它的数组封装在数组中,然后使用foreach从数组中提取元素。
$db=array(
"5659313586569216"=>array(
"Item Name"=>"Some Item",
"Item Country"=>"USA",
"Item Code"=>"123"
),
"5722646637445120"=>array(
"Item Name"=>"Some Other Item",
"Item Price"=>"$100",
"Item Code"=>"456"
)
);
foreach ($db as $itemcode=>$itemdata){
echo "For Item long code number ".$itemcode."...'n";
foreach ($itemdata as $itemfield=>$itemvalue){
echo "The ".$itemfield." is ".$itemvalue."...'n";
}
}
如果你使用网络浏览器以获得更好的外观,请在代码顶部添加以下行:
header("content-type: text/plain",true);
另一种方法:
// $entities is the array of Entity instances
$id = 5659313586569216;
list($entity) = array_filter(
$entities,
function($e) use ($id) { return $e->str_key_id == $id; }
);
echo "Item for $id = " . $entity->arr_data["item"] . PHP_EOL;
输出:
Item for 5659313586569216 = 123
为了清楚起见,在上面的示例中,私有str_key_id和arr_data成员作为公共成员进行访问。当然,代码应该更改为使用它们的访问器,如get_str_key_id()、getStrKeyId()或getId(),或者GDS''Entity类提供的任何访问器。