目标对象数组中的项目


Targeting item in Array of Objects

我有以下对象数组。我正试图瞄准其中一个,并获取数组数据。

因此,如果我想以5659313586569216为目标,我希望能够获取连接到它的阵列

简而言之,我想通过说我想从56593135865692165722646637445120获取[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类提供的任何访问器。